javascript中从内部函数返回值

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

我有一个功能,可以使用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.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的方法之外,您还可以看看返回结果的承诺,这是正确的。您可以使用回调返回您的值。