宣传回调
回调为主:
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);