Javascript setInterval方法是否等待(至少)特定代码的两次执行之间的指定时间间隔,还是在完成上一次执行和下一次执行开始之间等待该时间间隔?
(或者,当与Java的ScheduledExecutorService方法进行比较时 – setInterval类似于scheduleAtFixedRate()或者更确切地说是scheduleWithFixedDelay()?)
解决方法:
如果以1000毫秒的间隔调用setInterval并且回调代码需要100毫秒才能运行,则下一个回调将在900毫秒后执行.
如果回调需要1050毫秒,则下一个回调将在第一个完成后立即启动(延迟50毫秒).这种延迟将不断积累.
因此在Java世界中,这类似于scheduleAtFixedRate()
.如果您需要scheduleWithFixedDelay()
行为,则必须在每次完成时使用setTimeout()并重新调度回调:
function callback() {
//long running code
setTimeout(callback, 1000);
}
setTimeout(callback, 1000);
无论运行多长时间,上面的代码将在callback()完成之后等待1000毫秒,然后再次启动它.