循环nodejs的每次迭代延迟

时间:2017-05-03 14:46:35

标签: javascript node.js asynchronous settimeout sleep

除了第一个迭代之外,我想等待循环的每次迭代。这是我的代码,在setTimeout函数等待一些x秒后立即运行所有迭代而无需等待,第一次迭代正常工作。

这是代码

var requests_made = 0;
drivers.forEach(function(driver) {
    if (requests_made == 0) {
        createUser(data);
    } else {
        setTimeout(function () {
            createUser(data);
        },30000);
    }
    requests_made++;
});

1 个答案:

答案 0 :(得分:5)

你的超时使用静态delay30000,它将被所有迭代使用,所以它们都会在30秒后开始。

此延迟应该是动态的,并且会随着迭代索引一起动态增加,这就是您需要的:



var requests_made = 0;
var drivers = [10, 50, 30, 40, 50];
drivers.forEach(function(driver, index) {
  if (requests_made == 0) {
    //createUser(data);
    console.log(index);
  } else {
    setTimeout(function() {
      //createUser(data);
      console.log(index);
    }, 1000 * index);
  }
  requests_made++;
});




注意:

我使用了一组数字并减少了延迟值以用于测试目的。