【问题标题】:Use setTimeout within a forloop to pause and continue looping after some seconds在 for 循环中使用 setTimeout 暂停并在几秒钟后继续循环
【发布时间】:2017-08-15 23:11:50
【问题描述】:

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

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

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 实现吗

【问题讨论】:

标签: javascript for-loop settimeout


【解决方案1】:

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

【讨论】:

  • 谢谢@ignacio,我会试一试并回复你
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-03
  • 2016-05-01
  • 2020-06-20
  • 2017-08-19
  • 2015-03-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多