bluebird.jscheatsheet
新版本的 Node Native 的 Promise 和 Async/Await 实现已经很快了 bluebird.js 已经不再那么有必要使用了
贡献者:BAI
参考文档
promise cheatsheet Bluebird.js API (github.com).
示例
THEN(OKFN,promise .then(okFn, errFn) .spread(okFn, errFn) // * .catch(errFn) .catch(TypeError, errFn) // * .finally(fn) .map(function (e) { ··· }) // * .each(function (e) { ··· }) // *
标记 *
的均不是标准的 Promise API,并且只能在 Bluebird 下使用
多返回值
JS.then(function () { return [ 'abc', 'def' ]}).spread(function (abc, def) { ···})
多个 Promise
JSPromise.join( getPictures(), getMessages(), getTweets(), function (pics, msgs, tweets) { return ··· })
详见 Promise.join
多个 Promise(数组)
- Promise.all([p]) - 全部 Promise 均执行成功
- Promise.some([p], count) - count 数量的成功 expect
count
to pass - Promise.any([p]) - 相当于上面的方法 count 设置为 1,即有一个 Promise 成功
- Promise.race([p], count) - 可以用 any 替代
- Promise.map([p], fn, options) - 支持并行
JSPromise.all([promise1, promise2]).then((results) => { results[0]; results[1];});Promise.any(promises).then((results) => {});
JSPromise.map(urls, url => fetch(url)) .then(···)
详见 Promise.map
对象
JSPromise.props({ photos: get("photos"), posts: get("posts"),}).then((res) => { res.photos; res.posts;});
详见 Promise.props.
Promise 链式调用
JSfunction getPhotos() { return Promise.try(() => { if (err) throw new Error("boo") return result })}getPhotos().then(···)
详见 Promise.try.
Node 风格的函数
JSvar readFile = Promise.promisify(fs.readFile);var fs = Promise.promisifyAll(require("fs"));
详见 Promisification.
Promise 返回的方法
JSUser.login = Promise.method((email, password) => { if (!valid) throw new Error("Email not valid"); return; /* promise */});
详见 Promise.method.
生成器(Generator)
JSUser.login = Promise.coroutine(function* (email, password) { let user = yield User.find({ email: email }).fetch(); return user;});