提问者:小点点

节点js--当函数依赖于内部的异步函数时,我如何从函数返回一个值


我已经编写了一个发送电子邮件的节点js模块。该模块是nodemailer模块的包装器。当transporter.sendmail的回调被执行时,如果电子邮件被发送,我希望我的包装器函数返回true,否则返回false。我怎么能这么做?代码如下:

var nodemailer = require('nodemailer');

module.exports.sendEmail = function (mailerAddress, mailerPassword, to, subject, html) {
var transporter, mailOptions;

transporter = nodemailer.createTransport({
    service: 'Gmail',
    auth: {
        user: mailerAddress,
        pass: mailerPassword
    }
}); 

mailOptions = {
    from: mailerAddress, 
    to: to,
    subject: subject,
    html: html
};

transporter.sendMail(mailOptions, function(error, info) {
    if (error) {
        return false;
    }
    else {
        return true;
    }
});         
};

共1个答案

匿名用户

如果我理解的话,你所说的“包装函数”就是回调函数,所以如果我是正确的,试着做这样的事情:

var EmailUtil = {
    sendEmail : function sendEmail(mailerAddress, mailerPassword, to, subject, html, callback) {
        var options = {
            service: 'Gmail',
            auth: {
                user: mailerAddress,
                pass: mailerPassword
            }
        };
        var transport = nodemailer.createTransport(options);

        transport.sendMail({
            from: mailerAddress, 
            to: to,
            subject: subject,
            html: html
        }, function(err, responseStatus) {
            var val;
            if (error) {
                val = false;
            } else {
                val = true;
            }
            callback(error, val);
        });
    }
};

module.exports = EmailUtil;

这是我在生产中使用的一个真实的例子。

相关问题