我想以异步方式向用户发送多封邮件。
user.js文件
var emailUtil = require(" ./ emailUtil.js"); var userdata [100];
//假设在userdata中有多个数据,让它为100
for(let i = 0; i 让emailBody ='邮件正文',emailSubject =' SGT Schedule&#39 ;; emailUtil.sendEmail(emailBody,'',emailSubject,'''''              #39;&#39); }
在我编写电子邮件发送功能的另一个文件中
emailUtil.js
//电子邮件工具文件
var nodemailer = require('nodemailer');
// Not the movie transporter!
var transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: 'email id', // Your email id
pass: '*******' // Your password
}
});
module.exports =
{
sendEmail: function sendMail(varhtml,vartext,
varsubject,varfrom, varfrom_name,varto, varto_name,
reply_to_email ) {
//setup e-mail data with unicode symbols
var mailOptions = {
to: [varto], // list of receivers
subject: varsubject, // Subject line
text: vartext, // plaintext body
html: varhtml // html body
};
console.log(mailOptions);
// send mail with defined transport object
transporter.sendMail(mailOptions, function (error, info) {
if (error) {
return console.log(error);
}else{
return console.log(info);
}
});
} }
我想立即发送回复。我不需要等待电子邮件 所以为了做到这一点,我正在考虑使用循环发送邮件,但是异步。
Currenlty,我在发送邮件之前发送我的回复然后只是调用邮件功能?如果有人向该api发送另一个请求,那么将花费更多的时间,因为node.js是一个单线程,并且这个线程正在等待执行其代码(之前的api调用总线发送邮件)或者它不会查看只创建该文件的另一个实例
希望我能够正确解释我的问题。如果有任何疑虑,请告诉我
答案 0 :(得分:0)
for position, image in enumerate(watch_image_urls):
if image.startswith('/'):
watch_image_urls[position] = 'https://denissov.ru' + image
print watch_image_urls
这个函数可以这样调用,以达到理想的效果:
sendEmail: (somevariables balbla) {
//some code
transporter.sendEmail((err, res) => {
console.log(err);
console.log(res);
});
}
它将被称为一百次,而不是关心或等待回应。 现在,如果您的电子邮件功能是这样的:
for(let i = 0; i < 100; i++) {
sendEmail(someParams);
}
您仍然可以使用循环调用它并忽略回调返回的任何内容。如果您的功能如下:
sendEmail: (somevariables balbla, callback) {
//some code
transporter.sendEmail((err, res) => {
console.log(err);
console.log(res);
return callback(err, res);
});
}
tl; dr 在循环中调用您的函数,它会执行您想要的操作。如果你想要,你可以让你的函数返回一个promise或一个回调,以防在其他情况下你想等待它的结果。