javascript中从内部函数返回值
我有一个功能,可以使用express mailer在express中发送电子邮件:javascript中从内部函数返回值,javascript,Javascript,我有一个功能,可以使用express mailer在express中发送电子邮件: exports.sendEmail = function (req, res) { // various mail server settings here // var output = false; app.mailer.send( 'email', { to: req.body.to, subject: req.body.sub
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。我猜测(如果不知道app.mailer.send
)发送函数是异步的。因此,当它确实发送邮件时,sendmail
函数正在返回,因此您有一个竞争条件
一个典型的解决方案是在成功时执行回调,而不是返回一个成功变量,然后用它做一些事情。或者您可以使用延迟调用/承诺,因为它在返回变量后会覆盖该变量。它是一个异步函数。除了@Sirko的方法之外,您还可以看看返回结果的承诺,这是正确的。您可以使用回调返回您的值。