ctrlcv-dev.comgithub

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.spread

多个 Promise

JS
Promise.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) - 支持并行
JS
Promise.all([promise1, promise2]).then((results) => {
results[0];
results[1];
});
Promise.any(promises).then((results) => {});
JS
Promise.map(urls, url => fetch(url))
.then(···)

详见 Promise.map

对象

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

详见 Promise.props.

Promise 链式调用

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

详见 Promise.try.

Node 风格的函数

JS
var readFile = Promise.promisify(fs.readFile);
var fs = Promise.promisifyAll(require("fs"));

详见 Promisification.

Promise 返回的方法

JS
User.login = Promise.method((email, password) => {
if (!valid) throw new Error("Email not valid");
return; /* promise */
});

详见 Promise.method.

生成器(Generator)

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

详见 Promise.coroutine.

参考

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