我正在转换以下功能
// send an email
MyModel.sendEmail = function(cb) {
MyModel.app.models.Email.send({
to: 'foo@bar.com',
from: 'you@gmail.com',
subject: 'my subject',
text: 'my text',
html: 'my <em>html</em>'
}, function(err, mail) {
console.log('email sent!');
cb(err);
});
}
像这样进入Promise
return new Promise(function (resolve, reject) {
return app.models.AppEmail.send({
to: message.to,
from: message.from,
subject: 'My RM Text',
text: message.text,
},
(err, response) => {
if (err) {
console.log('errr');
return reject(err);
} else {
console.log('email sent');
return resolve(response);
}
});
});
但是我想将函数完全转换为Promise链,所以我很困惑如何转换这部分
(err, response) => {
if (err) {
console.log('errr');
return reject(err);
} else {
console.log('email sent');
return resolve(response);
}
});
进入.then()
块。我有些困惑,因为.then()
我只接受1个参数,然后在catch块中如果我处理错误,那我将如何称呼拒绝
答案 0 :(得分:0)
您可以使用util.promisify
自动将回调转换为promise:
const { promisify } = require('util');
const sendEmails = promisify(MyModel.app.models.Emails.send);
sendEmails({ /* hard coded values you used */).then(() => {
// done
});
答案 1 :(得分:0)
您使用的Promise代码可以创建一个函数,然后在函数调用后使用.then,然后可以继续执行您的诺言链。 将MyModel.sendEmail函数更改为
MyModel.sendEmail = function() {
return new Promise(function(resolve,reject){
MyModel.app.models.Email.send({
to: 'foo@bar.com',
from: 'you@gmail.com',
subject: 'my subject',
text: 'my text',
html: 'my <em>html</em>'
}, function(err, mail) {
if (err) {
console.log('errr');
reject(err);
} else {
console.log('email sent');
resolve(response);
}
});
})
}
现在您可以在Promise链中使用此功能,例如
function1()
.then(() => {
statement1;
return MyModel.sendEmail();
})
.then(()=> {
otherstatements;
})
.catch((err) => {
console.log(err);
})