【发布时间】:2018-02-06 11:28:01
【问题描述】:
如何让 bluebird 自动将 .nodeify/.asCallback 添加到生成的 Promise 中?
在 bluebird 中,任何 Promise 实例都可以附加到节点回调机制:
Promise.resolve('foo').asCallback(callback);
但是,有时可能需要定义的不是 Promise 本身,而是一种在调用时每次都返回一个新 Promise 的方法,如下所示:
// create a new random number promise each time
Promise.method((foo, callback) => Math.random());
// create a new random number promise each time using a generator
Promise.coroutine(function *(foo, callback) {
return Math.random();
});
在这种情况下,如果我想在 Promise 上附加一个回调处理程序,我必须在最后“人为地”这样做,使用这样的临时方法:
// create a new random number promise each time using a generator
Promise.coroutine(function *(foo, callback) {
// do some other stuff
return Promise.resolve(Math.random()).asCallback(callback);
});
但是,实际上,我的 promise 更加复杂,并且在这两者之间可能会发生很多事情,例如抛出未捕获的错误。如果当时没有回调处理程序附加到 Promise,则只有在使用 .catch 处理 Promise 时才能捕获错误,并且永远不会调用 callback。
那么,如何让 Promise 生成器为每个生成的 Promise 附加一个回调处理程序?
【问题讨论】:
标签: javascript node.js callback promise bluebird