Promisifying a callback

suggest change

Callback-based:

db.notification.email.find({subject: 'promisify callback'}, (error, result) => {
   if (error) {
       console.log(error);
   }

   // normal code here
});

This uses bluebird’s promisifyAll method to promisify what is conventionally callback-based code like above. bluebird will make a promise version of all the methods in the object, those promise-based methods names has Async appended to them:

let email = bluebird.promisifyAll(db.notification.email);

email.findAsync({subject: 'promisify callback'}).then(result => {

    // normal code here
})
.catch(console.error);

If only specific methods need to be promisified, just use its promisify:

let find = bluebird.promisify(db.notification.email.find);
find({locationId: 168}).then(result => {
    
    // normal code here
});
.catch(console.error);

There are some libraries (e.g., MassiveJS) that can’t be promisified if the immediate object of the method is not passed on second parameter. In that case, just pass the immediate object of the method that need to be promisified on second parameter and enclosed it in context property.

let find = bluebird.promisify(db.notification.email.find, { context: db.notification.email });
find({locationId: 168}).then(result => {

    // normal code here
});
.catch(console.error);

Feedback about page:

Feedback:
Optional: your email if you want me to get back to you:


Callback to promise:
* Promisifying a callback

Table Of Contents
1 npm
13 Callback to promise
41 cli
43 grunt
59 Hack
64 ES6
67 Redis
69 MongoDB
86 MongoDB
87 Lodash
91 CORS
105 N-API
108 Require