宣傳回撥

回撥為主:

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);