在控制台中未定义

时间:2017-04-08 13:06:24

标签: express nodemailer

我尝试为nodemailer创建单独的函数并期望返回boolean true或false。但是当邮件发送给用户时我收到了帐户中的邮件但是之后而不是true或false作为回报我&# 39; m得到未定义的值。

function nodeMailer(mailOptions){

 var transporter = nodemailer.createTransport({
        service: 'gmail',
        auth: {
            user: get.username,
            pass: get.password
        },
        tls: {
            rejectUnauthorized : false
        }
    });


    transporter.sendMail(mailOptions, (error, info) => {
       if(error) return false;

       return true;
    });
}

2 个答案:

答案 0 :(得分:2)

您未定义,因为truefalse应该返回您的nodeMailer函数,而不是transporter.sendMail。 在这种情况下,您可以创建Promise来帮助您。

var nodeMailer = function(mailOptions) {
    return new Promise(function(resolve, reject){
        var transporter = nodemailer.createTransport({
            service: 'gmail',
            auth: {
                user: get.username,
                pass: get.password
            },
            tls: {
                rejectUnauthorized : false
            }
        });


        transporter.sendMail(mailOptions, (error, info) => {
           if(error) reject(error);

           resolve(info);
        });
       }
   });
}

然后按照下面的说明致电您的承诺

nodeMailer(yourOptions).then(function(result) {
    // handle success result here
    return info; 
})
.catch(function(err) {
     // handle your error here
})

有关承诺的更多信息,请阅读here。当您需要控制异步流时,它们非常有用。

答案 1 :(得分:0)

使用回调或承诺尝试此操作。