2017-04-08 5 views
0

Ich versuche, separate Funktion für nodemailer zu machen und boolean wahr oder falsch im Gegenzug zu erwarten. Aber wenn die Mail an den Benutzer gesendet wird, bekomme ich die Mail in Rechnung, aber danach statt wahr oder falsch als Gegenleistung bekomme Wert als undefiniert.Undefiniert in der Konsole

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; 
    }); 
} 

Antwort

2

Sie werden immer undefiniert, weil true oder false sollten Ihre nodeMailer Funktion und nicht transporter.sendMail zurückzukehren. In diesem Fall können Sie Promise erstellen, die Ihnen dabei helfen können.

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); 
     }); 
     } 
    }); 
} 

und dann Ihr Versprechen wie

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

mehr über Versprechen Sie here lesen kann. Sie sind sehr nützlich, wenn Sie Ihren asynchronen Fluss steuern müssen.

+0

Ich würde vorschlagen, 'reject' im Falle von Fehlern und Auflösung von' info' für den Fall, dass es in Ordnung war. – robertklep

+0

Sie haben Recht, ich habe den Code geändert –

+0

Danke! Es funktioniert –

0

Versuchen Sie dies mit Callback oder Versprechen.