我有以下 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/