【发布时间】:2017-07-27 22:06:03
【问题描述】:
我有一个函数 sendMail 返回一个承诺。
module.exports = function sendMail(mailData) {
const smtpConfig = {
service: 'gmail',
auth: {
user: MAIL_USER,
pass: MAIL_PASS
}
};
const trans = nodemailer.createTransport(smtpConfig);
return new Promise((reject, resolve) => {
trans.sendMail(mailData, (err, result) => {
if (err) {
console.log('error', err)
reject(err);
}
else {
console.log('no error', result)
resolve(result);
}
});
});
}
promise 解决了,记录的输出是:
no error { accepted: [ 'test@test.com' ],
rejected: [],
response: '250 2.0.0 OK 1488900621 j79sm6419250itb.0 - gsmtp',
envelope: { from: '', to: [ 'test@test.com' ] },
messageId: '<511ca80b-0bec-2d06-8f52-81194bcbf26b@My-MacBook-Pro.local>' }
电子邮件已发送。 但是从另一个模块调用该函数,结果会作为错误传递给 .catch 块。
module.exports = User = {
sendMail(mailData)
.then((result) => {
console.log('here', result)
})
.catch((err) => {
console.log('error', err)
});
}
产生相同的输出,但作为 catch 块中的错误:
error { accepted: [ 'test@test.com' ],
rejected: [],
response: '250 2.0.0 OK 1488900621 j79sm6419250itb.0 - gsmtp',
envelope: { from: '', to: [ 'test@test.com' ] },
messageId: '<511ca80b-0bec-2d06-8f52-81194bcbf26b@MY-MacBook-Pro.local>' }
.then 块永远不会运行。
非常感谢任何关于我在这里遗漏的帮助。
【问题讨论】:
-
但是从另一个模块调用函数 - 当它工作正常时你在哪里调用它?
-
我在您的代码中看到的一个问题是
return new Promise((reject, resolve) => {应该是return new Promise((resolve, reject) => {解析器在拒绝器之前梳理。
标签: javascript node.js error-handling es6-promise