将一个方法转换为promise:Nodejs

Convert a method into a promise : Nodejs

本文关键字:转换 promise Nodejs 方法 一个      更新时间:2023-09-26

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

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

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

我理解这是因为我的方法不返回承诺。我不知道如何编写此方法以在保留其原始功能的同时返回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文档,如果在sendMail调用中省略回调,它将返回一个Promise。那就把它还给我吧。

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