我有一段Javascript,每n秒检查一次条件(通过AJAX调用)。如果该条件为真,则停止检查。我已通过以下方式实现它:
var stopTimer;
var timerId = setInterval(function() {
/* Make Ajax Calls and set stopTimer */
if (stopTimer) {
clearInterval(timerId);
}
}, 10000);
然而,我发现不稳定的行为:有时会工作,但在其他时候,它会一直检查。我已经检查过(尽可能多)代码的任何部分都没有错误。
因此我怀疑在setInterval处理程序中调用clearInterval可能是罪魁祸首。是对的吗?可以在setInterval处理程序中调用clearInterval吗?
感谢您的关注
答案 0 :(得分:19)
这很安全。问题可能与stopTimer未按预期设置有关。
答案 1 :(得分:3)
我不认为你的代码会有任何问题,除非AJAX函数是错误的。您必须处理AJAX函数的成功和错误回调,以便循环不会出现任何问题。
此外,我认为您不断轮询服务器以获取响应,然后执行相应的操作。您可以使用 Reverse AJAX 来执行此类过程。
答案 2 :(得分:2)
确保您不会无意中在代码中的其他位置重复使用相同的计时器名称,这将导致您始终停止定义第二个计时器。
为计时器指定一个唯一的名称,或将其作用于函数
var timerForAjax = setInterval(function() {
/* Make Ajax Calls and set stopTimer */
if (stopTimer)
{
clearInterval(timerForAjax);
}
}, 10000);
我不小心打电话给我的计时器interval
并且没有意识到我在同一范围内创建了两个名为interval
的计时器。将iOS8归咎于大约一个小时,直到我意识到that与它无关。