Javascript 在setInterval处理程序中调用clearInterval可以吗?
我有一段Javascript,它每n秒检查一个条件(通过AJAX调用)。如果该条件为真,则停止检查。我已通过以下方式实施:Javascript 在setInterval处理程序中调用clearInterval可以吗?,javascript,timer,Javascript,Timer,我有一段Javascript,它每n秒检查一个条件(通过AJAX调用)。如果该条件为真,则停止检查。我已通过以下方式实施: var stopTimer; var timerId = setInterval(function() { /* Make Ajax Calls and set stopTimer */ if (stopTimer) { clearInterval(timerId); } }, 10000); 然而,我发现不稳定的行为:有时有效
var stopTimer;
var timerId = setInterval(function() {
/* Make Ajax Calls and set stopTimer */
if (stopTimer) {
clearInterval(timerId);
}
}, 10000);
然而,我发现不稳定的行为:有时有效,但在其他时候,它会永远检查。我已经检查过(尽可能多地)代码的任何部分都没有错误
因此,我怀疑在setInterval处理程序中调用clearInterval可能是罪魁祸首。是这样吗?在setInterval处理程序中调用clearInterval可以吗
谢谢您的关注很安全。问题可能与stopTimer未按预期设置有关。我认为您的代码不会有任何问题,除非AJAX函数出错。您必须注意AJAX函数的成功和错误回调,这样就不会出现循环未停止的问题
另外,我认为您一直在轮询服务器以获得响应,然后执行适当的操作。您可以使用来执行此类过程。确保您没有无意中在代码的其他地方重复使用相同的计时器名称,这将导致您始终停止要定义的第二个计时器 为计时器指定一个唯一的名称,或将其作用域指定给函数
var timerForAjax = setInterval(function() {
/* Make Ajax Calls and set stopTimer */
if (stopTimer)
{
clearInterval(timerForAjax);
}
}, 10000);
我很粗心地调用了我的计时器
interval
,没有意识到我在同一范围内创建了两个计时器,它们都被称为interval
。责怪iOS8大约一个小时,直到我意识到这与它无关。谢谢。将检查并共享查找记录。是的,Ajax完成的往返时间可能会干扰setInterval设置的重复间隔。如果这就是你当时所做的,那就可以解释为什么它会永远被检查