It strikes me that this developer chooses to write an abstraction on top of JS for solving his recurring problems, over simply using language features readily available.<p>Promises are as much a pattern or mechanic as callbacks, but the latter feels far more natural in JS. The `promised` decorator is interesting, but it has problems:<p>- The application I work on, and have in mind with this, would need just about every function decorated.<p>- It doesn't account for methods, unless you're default decorating the method, ie.: `Foo.prototype.myMethod = promised(function(/* ... <i>/) { /</i> ... */ });`<p>- Every decorated function takes a noticable performance hit, because things like `Function#apply` and concatenating `arguments` are relatively slow.<p>- It doesn't sit well with me that the example rewrites a method on a prototype declared elsewhere: `console.log = promised(console.log)`<p>Further, the article and library don't even scratch the surface of complicated async flows. Think async versions of common functional-style methods like `map`, `reduce`, etc.<p>For example, a basic scenario from our own build process is: Scan a directory for template files, read them, compile them, then concatenate the result and write it out.<p>We used to have a promise library to do all of this, from handling a build process to performing database queries. I discovered Async.js at some point and haven't look back since: <a href="https://github.com/caolan/async" rel="nofollow">https://github.com/caolan/async</a>