将蓝鸟承诺包装在mPromise中



我在整个服务中使用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——这很昂贵——每个原型调用一次。

最新更新