I write lots of modules which look like this:
function get(index, callback) { if (cache[index] === null) { request(index, callback); // Queries datab
http://blog.izs.me/post/59142742143/designing-apis-for-asynchrony
if you're doing callbacks internally, do whichever is suitable
if you're creating a module used by other people, asynchronous callbacks should always be asynchronous.