在 mPromise 中包装 Bluebird 承诺

Wrap Bluebird promise in mPromise

我在整个服务中使用 mPromises 并且为了保持一致的接口(即 end() for ex)我需要在其中包装一个承诺的 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]

您不需要将 bluebird 承诺包装在 mPromise 中。

Mongoose 中的 Promise 是 Promises/A+ 合规的,bluebird promises 也是如此 - 您可以简单地混合和匹配它们,并且保证它们的行为一致。您可以在需要 mPromises 的地方传递 bluebird promise,反之亦然。

就是说 - 我会采取另一种方式并承诺 Mongoose.prototype 因为 bluebird 承诺易于调试并且速度更快。

如果你必须 - 你可以这样做:

var p = new mPromise();
p.fulfill().chain(bluebirdPromise);

此外,不要为每个请求都调用 promisify - 这很昂贵 - 每个原型都调用一次。