javascript - 将方法转换为 Promise : Nodejs

标签 javascript node.js promise nodemailer

我有以下 Nodejs 方法,我想调用并执行 .then 函数。我不知道如何编写这个方法,以便我可以在其上使用 .then() 方法。

我在 nodemailer.js 中有 sendEmail 方法,我想在 app.js 中调用该方法并执行 .then() 方法。目前它给了我错误:

nodeMailer.sendEmail().then(function ...
TypeError: Cannot read property 'then' of undefined.

我明白这是因为我的方法没有返回 promise 。我不确定如何编写此方法来返回 promise ,同时保留其原始功能。

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 docs ,如果您在 sendMail 调用中省略回调,它将返回一个 Promise。所以只需返回即可。

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

关于javascript - 将方法转换为 Promise : Nodejs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37268506/

相关文章:

javascript - Promise 中的 XMLHttpRequest 进度事件

javascript - 使用javascript对二维数组进行排序

javascript - 将 Window 对象上的鼠标滚轮事件更改为 {passive : false} - Javascript

javascript - 我应该使用原生 ES6 Promises + polyfill 还是自定义 Promise 库?

mysql - 通过在 SequelizeJS 中存储为二进制的 UUID 查找行

django - 错误 : Cannot find module 'socket.io/node_modules/redis' on Mac

javascript - 生成器和 Promise - 尝试结合

javascript - 使用 jQuery 扩展 div 时浏览器滚动

javascript - 循环运行的节点 switch-case 命令

javascript - 错误:No transport method defined