在javascript中从内部函数返回值

时间:2014-07-01 15:06:28

标签: javascript

我有一个功能,我使用快递邮件发送电子邮件:

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。

1 个答案:

答案 0 :(得分:0)

我猜测(在不知道app.mailer.send的实现细节的情况下无法判断)send函数是异步的。因此,虽然它确实发送了邮件,但sendEmail函数正在返回,因此您有竞争条件。

典型的解决方案是在成功时执行回调,而不是返回成功变量,然后对其执行某些操作。或者你可以使用延期通话/承诺http://www.htmlgoodies.com/beyond/javascript/making-promises-with-jquery-deferred.html