我已经编写了一个发送电子邮件的节点js模块。该模块是nodemailer模块的包装器。当transporter.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;
这是我在生产中使用的一个真实的例子。
问题内容: 如何从异步函数返回值?我试图喜欢这个 它给了我, 问题答案: 您不能超出范围。为了获得预期的结果,您应该将其包装到异步IIFE中,即 样品。 有关更多信息 由于返回一个Promise,因此可以将其省略,如下所示: 然后像以前一样做
我在一个函数中有这样的代码块: 它获取一些数据,然后对数据运行验证()。 但是,我对数据的验证实际上也是异步的,因为它是根据一个json模式来验证数据的,而json模式位于一个独立的json文件中,所以它必须首先读取该文件。 我使用了一个承诺来读取文件内容,然后进行验证: 如何编辑此问题中的顶部代码块以解释if语句()中的异步函数?
问题内容: 如何从异步函数返回值?我试图喜欢这个 它给了我, 问题答案: 您不能超出范围。为了获得预期的结果,您应该将其包装到异步IIFE中,即 样品。 有关更多信息 由于返回一个Promise,因此可以将其省略,如下所示: 然后像以前一样做
问题内容: 在SO中多次问过这个问题。但是我还是收不到东西。 我想从回调中获得一些价值。请看下面的脚本进行澄清。 如果我尝试返回该值,则只是“未定义”。我遵循了SO的一些想法,但仍然失败。 那些是: 问题答案: 这是不可能的,因为您无法从同步方法内部的异步调用返回。 在这种情况下,您需要将回调传递给foo,该回调将接收返回值 问题是,如果内部函数调用是异步的,则所有“包装”此调用的函数也必须是异步
更新 我已经读了十几篇关于这个话题的文章,但没有一篇涉及到这个基本问题。我将在本文末尾列出一个参考资料部分。 原始帖子 我对函数的理解是,它返回一个promise。 MDN文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function 在我的程序中,我可以编写如下内容: 我
问题内容: 如何从函数内部返回值? 这是我的基本设置: 问题答案: 使用回调函数,这是JavaScript的方式: