我在整个服务中使用mPromises,为了维护一致的接口(例如,ex的end()),我需要在其中包装一个promised Bluebird函数-尽管我对mPromise不太熟悉,但没有成功。这是我的:
var p = new mPromise();
p.chain(Bluebird.promisify(easypost.Address.create_and_verify, easypost.Address)(params.recipient)
.then(function(res) {
return p.resolve(res);
}, function(err) {
return p.reject(err);
});
)
return p;
这是一个很做作但很一般的想法。这会产生以下错误:
[TypeError: Cannot call method 'bind' of undefined]
您不需要在mPromise
s中包装蓝鸟承诺。
Mongoose中的承诺是符合承诺/A+的,蓝鸟承诺也是如此——你可以简单地混合和匹配它们,它们保证始终如一。你可以在期望mPromises的地方传递蓝鸟承诺,反之亦然。
话虽如此,但我会走另一条路,并承诺Mongoose.prototype
,因为bluebird承诺很容易调试,而且速度更快。
如果你必须-你可以做:
var p = new mPromise();
p.fulfill().chain(bluebirdPromise);
此外,不要为每个请求调用promisify
——这很昂贵——每个原型调用一次。