2017-04-08 82 views
0

我尝试为nodemailer制作单独的函数,并期望布尔值true或false作为回报。但是,当邮件发送给用户时,我在帐户中收到邮件,但在此之后而不是真或假返回I没有定义的价值。在控制台中未定义

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

你越来越不确定,因为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。当你需要控制你的异步流程时,它们非常有用。

+0

我会建议在出现错误的情况下使用'reject',并解析'info'以防万一它工作正常。 – robertklep

+0

你是对的,我改变了代码 –

+0

谢谢!它的工作原理 –

0

尝试使用回调或承诺。

相关问题