繁体   English   中英

如何管理setInterval Interval?

[英]How is setInterval Interval managed?

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

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

要么

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

取自Mozilla文档

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

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

有关JavaScript时序的更多信息,我推荐John Resig的文章JavaScript Timers如何工作


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

runFunc();

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

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

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

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

如果希望在间隔再次继续之前完成Ajax调用, setInterval希望使用setInterval 请改用setTimeout

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM