我正在开发一个项目,我希望通过在我的服务器上循环播放一系列电子邮件来向用户发送电子邮件。
阵列的项目(用户电子邮件)非常多,我想逐批发送电子邮件。
在循环中调用sendMail
函数。它现在有效,但我希望以每10次发送后暂停60秒的方式重写它。
这是我的代码。
for (var i = 0; i < unsetUsers.length; i++) {
var user = unsetUsers[i];
var obj = {
---
};
//send mail to each one of them
sendSetUpMail(obj);
}
使用for loop
和setTimeout
或setInterval
答案 0 :(得分:0)
是的,在我看来,以可读方式执行此操作的最佳方法是使用递归函数。功能与您的情况相同,但每批等待60秒。
function sendEmailsBatched(unsetUsers, offset, batchNumber) {
var users = unsetUsers.slice(offset, offset + batchNumber);
users.forEach(function(user) {
var obj = {
---
};
//send mail to each one of them
sendSetUpMail(obj);
})
var newOffset = offset + batchNumber;
if (newOffset < unsetUsers.length) {
setTimeout(function() {
sendEmailsBatched(unsetUsers, newOffset, batchNumber);
}, 60 * 1000);
}
}
现在,您可以像这样第一次调用此函数:
sendEmailsBatched(unsetUsers, 0, 10)
您也可以将超时毫秒传递给该函数,或者将batchNumber
始终硬编码为10
。