- reclaim simple synchronous control flow like return & throw
- easier to write and maintain
- banish callback hell
- gives each async call state: pending, fulfilled, rejected
- lets you break up asynchronous nested callbacks into chained synchronous logic
- use bluebird
- .then()
- .catch() / .finally()
- .props()
- .map() / .reduce() / .filter()
- .tap()
- More convenience methods: .get(), .return(), .delay()
- Promise.promisifyAll()
- promisify()
- resolve()
- new Promise(function (resolve, reject) {})