2017-04-08 45 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

嘗試使用回調或承諾。

相關問題