小编典典

JavaScript:For循环超时

javascript

我希望我的for循环不应该一次执行,而要在每次迭代后等待超时。例如:

for(var i=0; i<10; i++) {
    console.log(i);
    //wait for 1000
}

我发现了很多关于堆栈溢出的解决方案,例如:

for (var i=0;i<=10;i++) {
   (function(ind) {
       setTimeout(function(){console.log(ind);}, 3000);
   })(i);
}

但是在所有实现中,循环最初等待3000毫秒,然后立即执行整个for循环。有没有一种方法可以等待1000毫秒后调用每次迭代。


阅读 636

收藏
2020-05-01

共1个答案

小编典典

您可以使用简单的数学方法来解决:

for (var i=0;i<=10;i++) {
   (function(ind) {
       setTimeout(function(){console.log(ind);}, 1000 + (3000 * ind));
   })(i);
}

1000ms:0
4000ms:1
7000ms:2
10000ms:3
13000ms:4


跟随评论

您的请求似乎有点模糊。如果您想在上一次超时后执行某项操作,则可以设置一个限制并比较当前索引:

var limit = 10
for (var i=0;i<=limit;i++) {
   (function(ind) {
       setTimeout(function(){
           console.log(ind);
           if(ind === limit){
               console.log('It was the last one');
           }
       }, 1000 + (3000 * ind));
   })(i);
}

我想我知道你想要什么…

它只是要做

for (var i=0;i<=10;i++) {
   (function(ind) {
       setTimeout(function(){console.log(ind);}, 1000 * ind);
   })(i);
}
2020-05-01