我有以下要调用的Nodejs方法并执行.then
函数。我不确定如何编写此方法,以便我可以使用.then()
方法。
我在sendEmail
中使用nodemailer.js
方法,我想在app.js
中调用并执行.then()
方法。它目前给我错误:
nodeMailer.sendEmail()。then(function ...
TypeError:无法读取未定义的属性'then'。
我理解这是因为我的方法没有返回承诺。我不确定如何编写此方法以在保留其原始功能时返回承诺。
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
中调用上述内容会出现上述错误
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();
答案 0 :(得分:4)
根据nodemailer docs,如果您在sendMail
来电中省略了回调,则会返回Promise
。所以回过头来。
sendEmail: function() {
return transporter.sendMail(mailOptions)
.then(
function(info) {
console.log('Message sent: ' + info.response);
},
function(error){
console.log(error);
}
);
}