递归 setTimeout 调用神秘停止 运行
Recursive setTimeout calls mysteriously stop running
我想连续调用 JavaScript 中的函数,例如每 5 秒调用一次,直到发生取消事件。
我尝试使用 setTimeout 并在我的函数中调用它
function init()
{ setTimeout(init, 5000);
// do sthg
}
我的问题是调用在大约 2 分钟后停止,而我的程序有点长,大约 5 分钟。
我怎样才能一直调用我的函数,只要我想。
提前致谢
那个函数叫做setInterval
。
var interval = setInterval(init, 5000);
// to cancel
clearInterval(interval);
对于您所描述的行为,唯一可以想到的解释是:
正如另一位发帖者所提到的,init
在执行过程中以某种方式被覆盖,在代码的 // do sthg
部分
正在重新加载页面。
//do sthg
代码进入某种错误状态,这使得它看起来好像没有执行。
为保证 init
未被修改,请尝试将 // do sthg
部分作为函数传递,我们将调用 callback
:
function startLoop(callback, ms) {
(function loop() {
if (cancel) return;
setTimeout(loop, ms);
callback();
}());
}
其他发帖者建议使用 setInterval
。很好,但是有
使用 setTimeout
设置重复操作并在您执行操作时函数本身发出下一个 setTimeout
从根本上没有错。它是设置重复操作的常见且广为接受的替代方法。除其他优点外,它还允许根据行为调整后续超时,尤其是超时间隔(如果这是一个问题)。如果要使用 requestAnimationFrame
重写代码,因为它可能应该如此,那么除了在回调中发出下一个请求外别无选择,因为 requestAnimationFrame
没有 setInterval
模拟。
我想连续调用 JavaScript 中的函数,例如每 5 秒调用一次,直到发生取消事件。 我尝试使用 setTimeout 并在我的函数中调用它
function init()
{ setTimeout(init, 5000);
// do sthg
}
我的问题是调用在大约 2 分钟后停止,而我的程序有点长,大约 5 分钟。
我怎样才能一直调用我的函数,只要我想。
提前致谢
那个函数叫做setInterval
。
var interval = setInterval(init, 5000);
// to cancel
clearInterval(interval);
对于您所描述的行为,唯一可以想到的解释是:
正如另一位发帖者所提到的,
init
在执行过程中以某种方式被覆盖,在代码的// do sthg
部分正在重新加载页面。
//do sthg
代码进入某种错误状态,这使得它看起来好像没有执行。
为保证 init
未被修改,请尝试将 // do sthg
部分作为函数传递,我们将调用 callback
:
function startLoop(callback, ms) {
(function loop() {
if (cancel) return;
setTimeout(loop, ms);
callback();
}());
}
其他发帖者建议使用 setInterval
。很好,但是有
使用 setTimeout
设置重复操作并在您执行操作时函数本身发出下一个 setTimeout
从根本上没有错。它是设置重复操作的常见且广为接受的替代方法。除其他优点外,它还允许根据行为调整后续超时,尤其是超时间隔(如果这是一个问题)。如果要使用 requestAnimationFrame
重写代码,因为它可能应该如此,那么除了在回调中发出下一个请求外别无选择,因为 requestAnimationFrame
没有 setInterval
模拟。