javascript - 如何在循环内设置超时

标签 javascript

您是否尝试设置超时来运行多个函数,并在它们之间有一些延迟?超时是在for循环内吗?您的函数是否同时启动,并且不遵守超时,或者以其他方式导致困惑的行为?

这样写很直观,但不正确:

for (var i = 0; i < moves.length; i++) {
  setTimeout(chooseOne(moves[i]), i * 1000 + 1000);
}

解决方案:

解决方案是间接将 i 值传递给超时,如下所示。编写循环,在循环内调用超时函数并向该函数传递 i 值。

function clickedOne() {
    for (var i = 0; i < moves.length; ++i) {
      myTimeout(i);
    }
}

然后在一个单独的函数中,设置超时,传递一个匿名函数作为第一个参数,在该函数内我调用我的 ChooseOne 函数并向其传递每次迭代的唯一值。现在您可以编写一个逗号,并为 setTimeout 提供第二个参数,即您的超时时间。我的超时是一秒乘以 i,因此每个函数将在其之前的函数之后一秒执行。

function myTimeout(i) {
  setTimeout(function() { chooseOne(moves[i]); }, 1000 * i);
}

我实际上不知道为什么这有效,而第一种方法却无效。

最佳答案

试试这个:

var i = 0;
setTimeout(function(){
  if(i < moves.length){
      chooseOne(moves[i++]);
    }
}, i * 1000 + 1000);

关于javascript - 如何在循环内设置超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36637772/

相关文章:

javascript - Ember.js 主键 : '_id' ?

javascript - 将光标指针更改为自定义图标

javascript - 当鼠标焦点在标签上时,如何获取标签的名称及其ID?

javascript - 如何使用 popmotion pure 从关键帧旋转、平移和缩放矩形?

javascript - HTML 中的谷歌搜索?

php - 更改 Facebook Like 代码中的 URL

javascript - 如何触发p :selectOneButton in jQuery的点击事件

javascript - 使用 ReactJS 循环遍历 JSON 数组,但不了解代码的实际工作原理

javascript - vue-router 可以在新标签页打开链接吗?

javascript - AngularJS ng-map 将 View 位置设置为矩形坐标