I decided to write a little article to discourage an unfortunately common pattern in Node.JS modules (and browser JavaScript, to a lesser extent) that can boil down to these two examples: // A: function myFunction () { if (somethingWrong) { throw 'This is my error' } return allGood; } and // B: async Node.JS-style callback with signature `fn(err, …)` function myFunction (callback) { doSomethingAsy