2016-04-15 65 views
1

你是否试图设置一个超时来运行多个函数,它们之间有一些延迟?是for循环内的超时?您的功能是否都在同一时间触发,不尊重超时,否则会导致混乱的行为?如何在循环内设置Timeout

这是直观的,但不正确的将它写这样的:

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

SOLUTION:

的解决方案是将I值间接地传递到超时,这样的。编写循环,在循环内调用你的超时函数,并将该函数传递给i值。

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

然后在一个单独的功能,设置超时时间,通过一个匿名函数作为第一个参数,该函数我把我的chooseOne功能,通过它的独特价值对于每次迭代里面。现在你可以写一个逗号,并为你的超时setTimeout提供第二个参数。我的超时是我的一秒钟,所以每个函数都会在它之前的一秒之后执行。

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

我实际上不知道这是为什么,第一种方法没有。

+0

'moves.forEach(功能(移动,ⅰ){ 的setTimeout(函数(){ chooseOne(移动); } I * 1000 + 1000); } );' –

+1

http://stackoverflow.com/questions/5226285/settimeout-in-for-loop-does-not-print-consecutive-values –

+0

你能解释一下Arun P Johny – PencilCrate

回答

-1

尝试这种情况:

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

这通过第一个值从数组添加到函数中,并将其正确放置在计时器上。但是,它不遍历整个数组,但是没有其他值被使用。 – PencilCrate

+0

更新了我的答案。 –