如果我使用setInterval函数来调用异步JavaScript函数,那么每个X秒将在上一次执行完成后调用X秒还是在上次执行后调用X秒?例如。如果我显示呼叫的时间表是:
0秒:setInterval(funcX,10000)
10秒:funcX - 需要3秒才能执行
20秒:funcX
或
0秒:setInterval(funcX,10000)
10秒:funcX - 需要3秒才能执行
23秒:funcX
答案 0 :(得分:2)
使用固定的方法重复调用函数或执行代码片段 每次调用该函数之间的时间延迟。
因此,每隔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();