我已经编写了一个发送电子邮件的node-js模块。该模块是nodemailer模块的包装器。执行transportr.sendMail的回调时,如果发送了电子邮件,我希望包装函数返回true,否则返回false。我该怎么做?这是代码:
var nodemailer = require('nodemailer');
module.exports.sendEmail = function (mailerAddress, mailerPassword, to, subject, html) {
var transporter, mailOptions;
transporter = nodemailer.createTransport({
service: 'Gmail',
auth: {
user: mailerAddress,
pass: mailerPassword
}
});
mailOptions = {
from: mailerAddress,
to: to,
subject: subject,
html: html
};
transporter.sendMail(mailOptions, function(error, info) {
if (error) {
return false;
}
else {
return true;
}
});
};
如果我理解,你说的"包装器函数"就是回调函数,所以如果我是正确的,试着做这样的事情:
var EmailUtil = {
sendEmail : function sendEmail(mailerAddress, mailerPassword, to, subject, html, callback) {
var options = {
service: 'Gmail',
auth: {
user: mailerAddress,
pass: mailerPassword
}
};
var transport = nodemailer.createTransport(options);
transport.sendMail({
from: mailerAddress,
to: to,
subject: subject,
html: html
}, function(err, responseStatus) {
var val;
if (error) {
val = false;
} else {
val = true;
}
callback(error, val);
});
}
};
module.exports = EmailUtil;
这是我在生产中使用的一个真实的例子。
您也可以使用Promises:
模块
module.exports.sendMail = function(mailOptions) {
var transporter = ....;
return new Promise(function(resolve, reject) {
transporter.sendMail(mailOptions, function(error, info) {
if (error) {
reject(error);
} else {
resolve(info);
}
});
});
};
应用程序
var module = require('...');
var mail = {
to: '...',
from: '...'
};
module.sendMail(mail).then(function(response) {
console.info(response);
}).catch(function(error) {
console.info(error);
});
我认为你不应该这么做,因为你实际上是在试图将异步操作转化为同步操作。如果你打算这样做,那么我建议你看看这个答案,它使用async
。
用Javascript等待一些异步任务完成的最简单方法?