宣传回调

回调为主:

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

   // normal code here
});

这使用了 bluebird 的 promisifyAll 方法来宣传上面传统的基于回调的代码。bluebird 将为对象中的所有方法创建一个 promise 版本,这些基于 promise 的方法名称附加了 Async:

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

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

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

如果只需要宣传特定方法,只需使用其 promisify:

let find = bluebird.promisify(db.notification.email.find);

find({locationId: 168}).then(result => {
    
    // normal code here
});
.catch(console.error);

如果方法的直接对象未在第二个参数上传递,则有些库(例如,MassiveJS)无法实现。在这种情况下,只需传递需要在第二个参数上实现的方法的直接对象,并将其包含在 context 属性中。

let find = bluebird.promisify(db.notification.email.find, { context: db.notification.email });

find({locationId: 168}).then(result => {

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