JavaScript Callback函数未触发:nodemailer发送邮件成功后回调不执行
问题根源
你自定义封装的SendMail方法没有接收、也没有调用你业务代码传入的回调函数,导致你写的打印mail sent的逻辑永远不会被触发:
- 业务代码调用时传了2个参数:
mailer.SendMail(mailOptions, function(err) { ... }) - 但你的
SendMail定义只接收了第一个msg参数,完全没有处理传入的回调函数
解决方法
1. 修改SendMail函数定义,接收回调参数
给SendMail添加第二个入参接收回调函数:
// 修改前 // exports.SendMail = (msg) => { // 修改后 exports.SendMail = (msg, callback) => {
2. 在nodemailer的内置回调中调用你传入的回调
在transporter.sendMail的内部回调里,把执行结果透传给外部传入的回调:
return transporter.sendMail(msg, function (error, info) { if(error) { console.log(error); // 把错误传递给外部回调 return callback(error); } console.log("Message sent "+ info.response) // 调用外部回调,传递成功状态 callback(null, info); });
可选优化点
- 不要每次调用
SendMail都重新创建transporter实例,可以把transporter初始化放到函数外部复用,减少性能消耗 - 如果后续要切换成async/await写法,也可以直接返回
transporter.sendMail的Promise,不需要回调嵌套
内容的提问来源于stack exchange,提问作者codingbudgie
相关产品推荐
相关产品推荐

