在mPromise中包装Bluebird承诺

时间:2015-02-12 18:50:58

标签: mongoose promise bluebird

我在整个服务中使用mPromises并且为了维护一致的接口(即ex()的end()我需要在其中包含一个满意的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]

1 个答案:

答案 0 :(得分:2)

您无需在mPromise s中包含蓝鸟承诺。

Mongoose的承诺是承诺/ A +兼容,蓝鸟承诺也是如此 - 您可以简单地混合和匹配它们,并保证它们始终如一。您可以传递蓝鸟承诺,其中mPromises是预期的,反之亦然。

那就是说 - 我会采用相反的方式并宣传Mongoose.prototype因为蓝鸟承诺很容易调试并且速度更快。

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

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

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