如何管理setInterval Interval?

时间:2013-02-21 16:08:49

标签: javascript setinterval

如果我使用setInterval函数来调用异步JavaScript函数,那么每个X秒将在上一次执行完成后调用X秒还是在上次执行后调用X秒?例如。如果我显示呼叫的时间表是:

0秒:setInterval(funcX,10000)
10秒:funcX - 需要3秒才能执行 20秒:funcX

0秒:setInterval(funcX,10000)
10秒:funcX - 需要3秒才能执行 23秒:funcX

2 个答案:

答案 0 :(得分:2)

取自Mozilla documentation

  

使用固定的方法重复调用函数或执行代码片段   每次调用该函数之间的时间延迟。

因此,每隔X秒。但是如果函数执行的时间超过X秒,那么该线程将被锁定并在它空闲时执行。

有关JavaScript时间的更多信息,我建议使用John Resig的文章 How JavaScript Timers Work


如果你希望它在函数执行后X秒,请使用setTimeout()并在函数结束时调用它:

runFunc();

function runFunc(){
   //code here....
   setTimeout(runFunc, 3000);
}

这将导致无限递归,模拟setInterval(),但只在当前函数执行完毕后才启动X秒延迟。

答案 1 :(得分:0)

如果该功能实际需要3秒钟才能执行,则会出现严重问题。

这与您并不特别相关,因为您正在使用Ajax,实际的Ajax调用应该是实时的。

如果您希望Ajax调用在之前完成,则间隔会再次继续,setInterval是不合需要的。请改用setTimeout

function atTime() {
    ajax().done(function () { setTimeout(atTime, 10000); });
}
atTime();