向 Bluebird promise 添加方法

Adding a method to Bluebird promise

我已经承诺了 Mongoose。我有一些扩展 Mongoose Query 的方法,现在需要将它们添加到 Bluebird。我不介意扩展 Mongoose,但不想对这个更加全球化的库采用相同的方法。通过文档我看到了一些潜力,但我不确定。

我想以close/clean的身份出现如下:

Model.findAsync().toCustom();

toCustom 基本上是 toJSON 的一种形式,它 1) 执行查询和 2) 自定义输出 results/create 自定义错误等...非常简单。

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

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

你明白了...

Bluebird 实际上直接支持您的用例。如果您需要发布一个以您自己的自定义方式扩展 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`
};

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