我正在做一件简单的事情,但它不起作用。
我想做的是延迟 30 秒发送邮件。
代码如下:
user.forEach(function(data) {
var locals = {
fname: data.Name,
your_name: data.From,
}
template.render(locals, function(err, results) {
if (err) {
return console.error(err)
} else {
transporter.sendMail({
to: data.Email,
subject: "Welcome",
replyTo: data.ReplyTo,
html: results.html,
text: results.text,
}, function(error, info) {
console.log("here");
if (error) {
console.log(error);
} else {
console.log('Message sent: ' + info.response);
};
});
}
});
});
这里的 user 是一组对象,其中包含电子邮件、发件人、姓名等详细信息。
数组中的每个对象都有要发送的特定邮件的详细信息。
我想发送一封邮件并等待 30 秒,然后发送第二封......等等。
我使用了 setInterval 和 npm sleep,但它们不起作用。它等待 30 秒,然后一次发送所有邮件。
最佳答案
您应该用异步实现替换同步 forEach。
选项 1。使用 async.js eachLimit并延迟 30 秒调用回调
选项 2。您可以为发送电子邮件功能编写包装器,例如:
var emails = ['email1', 'email2' /*...*/];
function sendEmailAndWait(email, callback){
// your stuff
transporter.sendMail(email, function(error, info) {
// handle results
if(!emails.length) return callback();
setTimeout(function () {
sendEmailAndWait(emails.shift(), callback);
}, 30*1000)
})
}
sendEmailAndWait(emails.shift(), function(){ /* allDone */});
关于javascript - node.js 延迟发送邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38366758/