### Also see

Also see the promise cheatsheet and Bluebird.js API (github.com).

### Example

    promise
      .then(okFn, errFn)
      .spread(okFn, errFn)        // *
      .catch(errFn)
      .catch(TypeError, errFn)    // *
      .finally(fn)
      .map(function (e) { ··· })  // *
      .each(function (e) { ··· }) // *

Those marked with `*` are non-standard Promise API that only work with Bluebird promises.

### Multiple return values

    .then(function () {
      return [ 'abc', 'def' ]
    })
    .spread(function (abc, def) {
      ···
    })

Use Promise.spread

### Multiple promises

    Promise.join(
      getPictures(),
      getMessages(),
      getTweets(),
      function (pics, msgs, tweets) {
        return ···
      }
    )

Use Promise.join

### Multiple promises (array)

- Promise.all([p]) - expect all to pass
- Promise.some([p], count) - expect `count` to pass
- Promise.any([p]) - same as `some([p], 1)`
- Promise.race([p], count) - use `.any` instead
- Promise.map([p], fn, options) - supports concurrency

    Promise.all([ promise1, promise2 ])
      .then(results => {
        results[0]
        results[1]
      })

    // succeeds if one succeeds first
    Promise.any(promises)
      .then(results => {
      })

    Promise.map(urls, url => fetch(url))
      .then(···)

Use Promise.map to “promisify” a list of values.

### Object

    Promise.props({
      photos: get('photos'),
      posts: get('posts')
    })
    .then(res => {
      res.photos
      res.posts
    })

Use Promise.props.

### Chain of promises

    function getPhotos() {
      return Promise.try(() => {
        if (err) throw new Error("boo")
        return result
      })
    }

    getPhotos().then(···)

Use Promise.try.

### Node-style functions

    var readFile = Promise.promisify(fs.readFile)
    var fs = Promise.promisifyAll(require('fs'))

See Promisification.

### Promise-returning methods

    User.login = Promise.method((email, password) => {
      if (!valid)
        throw new Error("Email not valid")

      return /* promise */
    })

See Promise.method.

### Generators

    User.login = Promise.coroutine(function* (email, password) {
      let user = yield User.find({email: email}).fetch()
      return user
    })

See Promise.coroutine.

## Reference

http://bluebirdjs.com/docs/api-reference.html

0 Comments for this cheatsheet. Write yours!