我有一个功能,我使用快递邮件发送电子邮件:
exports.sendEmail = function (req, res) {
// various mail server settings here //
var output = false;
app.mailer.send(
'email',
{ to: req.body.to,
subject: req.body.subject,
otherProperty: 'Other Property'
},
function (err) {
if (err) {
// handle error
console.log(err);
res.send('There was an error sending the email');
return;
}
output = true;
console.log('email send');
}
);
return output;
}
现在这段代码全部有效,它会发送电子邮件。但是返回值为false,即使在控制台中显示“email send”字符串,因此必须执行“output = true”。从我读过的内容来看,应该可以覆盖内部函数中的变量,只要你不用“var”重新声明它,所以我不明白为什么它不会返回true。
答案 0 :(得分:0)
我猜测(在不知道app.mailer.send
的实现细节的情况下无法判断)send函数是异步的。因此,虽然它确实发送了邮件,但sendEmail
函数正在返回,因此您有竞争条件。
典型的解决方案是在成功时执行回调,而不是返回成功变量,然后对其执行某些操作。或者你可以使用延期通话/承诺http://www.htmlgoodies.com/beyond/javascript/making-promises-with-jquery-deferred.html