The problem with callbacks is clearly visible when you need to perform multiple sequencial asynchronous opperations. Normally asynchrounous callbacks don't return any value and are used to do side effects when the async operation was completed, thus not offering a good control flow.
Promisses are a pattern that targets this issue. Promises allow you to have a synchronous-flavored control flow over async operations. And as any other tool or pattern, if abbused, it can do more harm that good.
Now with the new features of ES6/7 we also have function generators, and async/await functions.
Please refer: pouchdb.com/2015/05/18/we-have-a-problem-with-pro… https://davidwalsh.name/async-generators jakearchibald.com/2014/es7-async-functions