繁体   English   中英

在forloop中使用setTimeout暂停并在几秒钟后继续循环

[英]Use setTimeout within a forloop to pause and continue looping after some seconds

我正在做一个项目,我想通过遍历服务器上的一系列电子邮件向用户发送电子邮件。

数组(用户电子邮件)的项目很多,我想分批向他们发送电子邮件。

在循环内调用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 loopsetTimeoutsetInterval

是的,在我看来,以可读方式实现此目的的最佳方法是使用递归函数。 与您的情况相同的功能,但每批等待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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM