JavaScript programmers are accustomed to the asynchronous programming model. Both a browser and the 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 to rely on callbacks. Callbacks are fine when dealing with just one asynchronous event, but things start to get complicated as soon as we need to coordinate multiple asynchronous events. Exceptional situation handling is particularly tough in this case.

To make asynchronous programming easier the Promise API was recently adopted by several popular JavaScript libraries. The concepts behind the Promise API are not new, and were proposed in the late seventies, but only recently those concepts made it into the mainstream JavaScript programming.