cyberwombat
cyberwombat

Reputation: 40104

Adding a method to Bluebird promise

I have promisified Mongoose. I have some methods that extent Mongoose Query that now would need to be added to Bluebird. I don't mind extending Mongoose but do not want to take the same approach for this more gobal library. Looking through the docs I see some potentials but I am not sure.

I would like to come as close/clean as the following:

Model.findAsync().toCustom();

toCustom is basically a form of toJSON which 1) execs the query and 2) custom outputs the results/create custom errors etc... pretty straighforward.

What is the cleanest way to achieve something like the above? I would like to avoid doing this each time:

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

You get the idea...

Upvotes: 3

Views: 659

Answers (1)

Benjamin Gruenbaum
Benjamin Gruenbaum

Reputation: 276326

Bluebird actually supports your use case directly. If you need to publish a library that extends bluebird in your own custom way you can get a fresh copy of bluebird by doing:

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`
};

You might also want to export it somehow. This feature is designed for library authors and for getting an isolated copy of bluebird. See the for library authors section in the wiki.

Upvotes: 3

Related Questions