将方法转换为承诺:Nodejs
Convert a method into a promise : Nodejs
我有以下 Nodejs 方法,我想调用并执行 .then
函数。我不确定如何编写此方法以便我可以在其上使用 .then()
方法。
我在 nodemailer.js
中有 sendEmail
方法,我想在我的 app.js
中调用它并执行 .then()
方法。它目前给我错误:
nodeMailer.sendEmail().then(function ...
TypeError: Cannot read property 'then' of undefined.
我理解这是因为我的方法没有 return 承诺。我不确定如何在保留其原始功能的同时将此方法写入 return 承诺。
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
调用中省略回调,它将 return 一个 Promise
。所以只是 return 那。
sendEmail: function() {
return transporter.sendMail(mailOptions)
.then(
function(info) {
console.log('Message sent: ' + info.response);
},
function(error){
console.log(error);
}
);
}
我有以下 Nodejs 方法,我想调用并执行 .then
函数。我不确定如何编写此方法以便我可以在其上使用 .then()
方法。
我在 nodemailer.js
中有 sendEmail
方法,我想在我的 app.js
中调用它并执行 .then()
方法。它目前给我错误:
nodeMailer.sendEmail().then(function ...
TypeError: Cannot read property 'then' of undefined.
我理解这是因为我的方法没有 return 承诺。我不确定如何在保留其原始功能的同时将此方法写入 return 承诺。
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
调用中省略回调,它将 return 一个 Promise
。所以只是 return 那。
sendEmail: function() {
return transporter.sendMail(mailOptions)
.then(
function(info) {
console.log('Message sent: ' + info.response);
},
function(error){
console.log(error);
}
);
}