暂停JavaScript异步循环一段时间
Pausing JavaScript Asynchronous Loop for some time
我有一个暂停异步JS循环执行一段时间的问题。
我需要它暂停,例如每45次迭代,所以我想出了一个简单的代码来帮助我确定何时发生:
if (i > 1)
{
var numba = i / 45;
if (isInteger(numba))
{
document.write('TIMEOUT START <br>');
setTimeout(function(){document.write('TIMEOUT END<br>');}, 540000);
}
}
function isInteger(x)
{
return x % 1 === 0;
}
我的异步循环代码如下:
var num = 150;
var asyncLoop = function(o)
{
var i=0;
var loop = function(){
i++;
if(i==o.length){o.callback(); return;}
o.functionToLoop(loop, i);
}
loop();//init
}
asyncLoop({
length : num,
functionToLoop : function(loop, i)
{
if (i==0){}
loop();
},
callback : function(){
}
});
首先,我试图将这段代码用于在循环函数中暂停循环,但是这不起作用,现在我部分理解了为什么。然而,我尝试的其他方法也都失败了。有人知道我要怎么做吗?
Thanks in advance
下面是我编写的一个片段。它将调用functionToLoop
loops
次,每次pauseAt
运行时暂停pauseTimeout
毫秒,然后在最后调用callback
。
function loopWithPause(functionToLoop, callback, loops, pauseAt, pauseTimeout) {
var n = 0;
function start() {
if(n + pauseAt > loops) pauseAt = loops- n;
for(var i = 0; i < pauseAt; i++) {
functionToLoop(n + i);
}
n += pauseAt;
if(n == loops) callback();
else setTimeout(start, pauseTimeout);
}
start();
}
的例子:
loopWithPause(function(i){console.log(i)}, function(){console.log('done!')},10, 2, 2000);
输出:
0
1
(2 second pause)
2
3
(2 second pause)
4
5
(2 second pause)
6
7
(2 second pause)
8
9
done!
对于您的场景,调用可能是:
loopWithPause(functionToLoop, callback, 150, 45, 540000);
这是你想要的。也许你可以根据自己的需要调整一下。把它粘贴到你的JavaScript控制台,看着它永远运行。
var printNumbers = function(startingAt) {
var end = startingAt + 45;
for (i = startingAt; i < end; i++)
{
console.log(i)
}
window.setTimeout(function() { printNumbers(end); }, 1000)
}
printNumbers(0)
它几乎是递归的,除了递归是通过带有超时的事件循环发生的。
通过变量传递状态,以便下次函数运行时使用(或者使用全局变量或闭包来包含函数执行之间的状态)。这是做这样的事情的唯一方法,因为JavaScript是单线程的,你不能在不使整个运行时停止的情况下"暂停"。
相关文章:
- Canvas+svg路径动画,在路径中的特定点暂停一段时间,然后继续
- 收集一段时间内的EMG数据.建议JS
- 在一段时间内切换文本
- 如何停止字幕文本一段时间,然后继续
- HTTP服务器在一段时间后停止(Node.js)
- 表单提交在一段时间循环PHP,jquery
- 在for循环中另一个音频结束后播放一段时间的音频
- Vanilla Js:在一个事件中开始一段时间的循环,然后用第二个事件打破它?('mouseover'启
- JavaScript:循环一段时间
- 运行一次函数(在一段时间循环中)
- 在一段时间循环中刷新来自跳跃运动的帧
- 在一段时间后隐藏文本,并在其位置显示另一个文本并保持循环
- 暂停JavaScript异步循环一段时间
- 循环遍历一组名称,每隔一段时间采取操作
- 如何在一段时间后停止执行包含无限循环的Javascript函数
- setTimeout在我的循环javascript幻灯片函数中工作了一段时间,然后停止延迟
- FB.init 在 IFrame 导致 IE8 无限循环,一段时间后出现 Flash 错误消息
- 一段时间循环中的 IF 语句不起作用,我哪里出错了
- 如何在JS中循环一个函数一段时间
- 刷新页面或在一段时间后将页面重定向到循环中的新URL