向Bluebird承诺添加方法

时间:2015-02-14 05:29:28

标签: promise bluebird

我已经宣传了猫鼬。我有一些方法可以扩展现在需要添加到Bluebird的Mongoose Query。我不介意扩展Mongoose但是不想对这个更多的gobal库采用相同的方法。通过文档看,我看到了一些潜力,但我不确定。

我想像以下一样接近/干净:

Model.findAsync().toCustom();

toCustom基本上是toJSON的形式,1)执行查询和2)自定义输出结果/创建自定义错误等...非常直接。

实现上述目标的最简洁方法是什么?我想每次都避免这样做:

Model.findAsync().then(function(docs) {
  return toCustom(docs);
}, function(err) {
  return toCustom(err);
});

你明白了......

1 个答案:

答案 0 :(得分:3)

Bluebird实际上直接支持您的用例。如果您需要以自己的自定义方式发布一个扩展bluebird的库,您可以通过以下方式获取蓝鸟的新副本:

var Promise = require("bluebird/js/main/promise")();
Promise.promisifyAll(require("mongoose")); // promisify with a local copy
Promise.prototype.toCustom = function(){
   return this.then(toCustom, toCustom); // assuming this isn't just `.finally`
};

您可能还想以某种方式导出它。此功能专为图书馆作者设计,用于获取蓝鸟的孤立副本。请参阅Wiki中的for library authors部分。