宣傳回撥
回撥為主:
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);