繁体   English   中英

将方法转换为Promise:Node.js

[英]Convert a method into a promise : Nodejs

我有以下要调用的Nodejs方法,并在其上执行.then函数。 我不确定如何编写此方法,以便可以在其上使用.then()方法。

我想在app.js调用nodemailer.js中的sendEmail方法, nodemailer.js执行.then()方法。 当前它给我错误:

nodeMailer.sendEmail()。then(函数...
TypeError:无法读取未定义的属性“ then”。

我了解这是因为我的方法未返回承诺。 我不确定如何编写此方法以返回诺言,同时保留其原始功能。

nodemailer.js

var nodemailer = require('nodemailer');

var transporter = nodemailer.createTransport('smtps://********');   
var mytext="my new text";

var mailOptions ={
    from: '"Reviews"<Reviews@reviews.com>', // sender address
    to: 'Someone@something.com', // list of receivers
    subject: 'Test', // Subject line
    text: '', // plaintext body
    }

module.exports = {
    mailOptions:mailOptions,
    sendEmail: function() {
        transporter.sendMail(mailOptions, function(error, info) {
            if (error) {
                    console.log(error);
               } else {
                    console.log('Message sent: ' + info.response);
               }
        })
    }
}

app.js调用上述内容会产生上述错误

app.js

var nodeMailer = require('./nodeMailer')
var cron = require('cron');

var cronJob1 = cron.job("*/30 * * * * *", function(){
    Model.find(query,function (err, results) {
        if (err) {
            res.status(500).json({ message: 'Something Broke!' });
        } else {
            nodeMailer.mailOptions.text =  JSON.stringify(results);
            nodeMailer.sendEmail().then(function(){
                Model.findAndUpdate(query,  { $set: { "email": true }}, 
                    function(err, resp){
                        console.log(resp, "successfully updated")
                    })
            });
        }
    });
}); 
cronJob1.start();

根据nodemailer文档 ,如果您在sendMail调用中省略了回调,它将返回Promise 因此,只需返回即可。

sendEmail: function() { 
  return transporter.sendMail(mailOptions)
  .then(
    function(info) { 
      console.log('Message sent: ' + info.response); 
    },
    function(error){
      console.log(error); 
    }
  );
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM