The promise API with $q
node.js execution environments are full of asynchronous events: XHR responses, DOM events, IO and timeouts, which can be triggered at any moment and in random order. Even if, we are all used to coping with the asynchronous nature of the execution environment the truth is that asynchronous programming might be perplexing, especially when it comes to synchronizing multiple asynchronous events.
In the synchronous world chaining function calls (invoking a function with a result of another function) and handling exceptions (with try/catch) is straightforward. In the asynchronous world, we can't simply chain function calls; we need ...