在 for 循环中指定延迟后循环

Loop after specified delay in for loop

我有这个,但好像没用

for (var i = 0; i < 5; i++) {
  setTimeout(function() {
    // My code
  }, 1000);
}

用过一次就不行了

我认为你应该将你的时间乘以 i。 如果只放你的时间,1000ms后所有迭代会同时执行。

因此代码将是:

for (var i = 0; i < 5; i++) {
  setTimeout(function() {
    // My code
  }, 1000*i);
}

我认为 setInterval 更适合这种情况:

let i = 0;
const interval = setInterval(function() {
    if(i == 4) clearInterval(interval);
    // My code
    console.log(i);
    i++;
}, 1000);

通过使用 1000 作为持续时间,它使您的代码看起来只适用于第一个 i 实例。这里发生的是,for 循环执行得很快,但是每个 i 的每个 setTimeout 几乎会同时执行,但不完全是……会有拆分 ms 在每个 i.

之间

假设循环在大约 300ms 内执行,每个 i300ms / 5 执行...这意味着每个 setTimeout 将只是 300/5 ms 后面一个。因此,执行此操作时,看起来第一个 i 是显示所需结果的那个,而其他的则没有。

但是,根据我认为您想要实现的目标,您应该尝试在每个 i 之间创建一个大约 1000ms 的超时延迟。所以你应该这样做:

for (let i = 0; i < 5; i++) {
  (function(i){
    setTimeout(function() {
    console.log(i);
    }, i*1000);
  })(i);
}