我目前有一个Javascript forEach()循环,但是我需要更改代码以在第500个迭代中添加一个“睡眠”。
这种模式让我每次迭代睡眠3秒:
for (let i=1; i<10; i++) {
setTimeout( function timer(){
alert("hello world");
}, i*3000 );
}
第2次或第500次迭代我如何睡觉?
PS:
该解决方案需要在Chrome和IE11上运行。
您可以创建一个函数来捕获闭包中的循环变量,并返回一个简单的函数,该函数具有按批处理大小返回的循环。效果是,它使您可以从上次停止的地方继续执行for循环。如果有,则返回一个布尔值,指示是否完成操作,您可以将整个内容包装在中setInterval
。显示比解释容易:
function batch(batch_size, end){
var i = 0 // capture i in closure
return function(){
for(i; i <= end; i++){
console.log("doing something", i) // work goes here
if (!((i+1) % batch_size)) return i++
}
return false
}
}
var f = batch(5, 11) // 0 - 11 batched in groups of 5
if (f()){ // start immediately, then setInterval if not finished in one batch.
var interval = setInterval(() => {
f() || clearInterval(interval)
}, 2000 )
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句