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

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

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

#1楼 票数: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

  ask by Kenshinman translate from so

未解决问题?本站智能推荐:

1回复

jQuery-使用嵌套setTimeout暂停for循环

我试图使用超时来暂停for循环,这将使某些元素动起来。 我想要一些按钮来一个接一个地展开。 目前,我有两个问题。 首先是eq。(j)的元素索引1比看起来应该的大。 另一个是它跳到最后一个动画。 这是我第一次使用stackoverflow,所以请告知我是否正确发布了此问题。
2回复

无法在for循环中使用setTimeout

我一直在尝试创建一个JavaScript函数,它快速循环遍历rgb值的所有24位,并以动态变化的div-background的形式显示它们 为了减慢进程,看到我正在考虑使用setTimeout方法。 我做了一些关于在循环中使用setTimeout的研究并发现了这一点。 for循环中
4回复

在数组中使用 setTimeout 和 for 循环显示图像

我需要在我的页面中显示图像。 time是图像应该在页面上显示的时间。 例如: 第一张照片car_0.png在页面上显示3秒。 3 秒后,它变为第二个图像,显示 0.5 秒... 我已经写了这个方法但不起作用: 编辑: 我将我的方法更改为: 现在在console.log(time
1回复

阐明 setTimeout 和 forloop 交互的工作原理

我无法理解为什么答案是 9。根据我的理解,将setTimeout函数添加到 for 循环中意味着setTimeout函数将为每个循环运行 3 次。 所以它循环了 3 次,在每个循环中, setTimeout运行了 3 次,总共 9 次? 我缺少理解。 var result = 0;
3回复

如何在for循环内使用setTimeout更改div内容?

我有以下代码。 我希望标题执行的操作是连续更改不同的文本“ Head#”。 该代码可以每隔一段时间更改一次,但只能更改一次。 更改完成后,由于某种原因,它不会循环并继续循环。
3回复

如何使用setTimeout在javascript for循环中添加延迟?

我想保留for-loop的迭代,直到上一个迭代中的功能完成为止。 我已经看到了许多有关setTimeout问题,但没有一个满足我的要求。 谁能帮我? function abcd() { var exArray = [0, 0, 1, 1, 1, 0, 0, 0]; var
1回复

setTimeout 循环等待另一个 setTimeout 循环

我想在第一个功能完成后执行第二个功能。 结果: 我:0,我:1,...,我:9, j: 0,j: 1,...,j: 9
2回复

for循环使用setTimeout将数字打印到控制台

我读了关闭闭包并找到了这段代码。 这在2秒后输出5次5次。 我理解这一点,但在五个出现之前,他身上有数字。 当我再次执行此代码时,它会更改为其旧值增加5。 它是什么? 在控制台上编写代码,看看它输出的内容然后解释一下它是什么?