Javascript setInterval - 率还是延迟?

use*_*850 4 javascript setinterval

Javascript setInterval方法是否等待(至少)特定代码的两次执行之间的指定时间间隔,还是在完成上一次执行和下一次执行开始之间等待该时间间隔?

(或者,比较Java的时候ScheduledExecutorService方法-是的setInterval相似scheduleAtFixedRate()或者说scheduleWithFixedDelay()?)

Tom*_*icz 6

如果setInterval1000毫秒的间隔调用并且回调代码需要100毫秒才能运行,则下一个回调将在900毫秒后执行.

如果回调需要1050毫秒,则下一个回调将在第一个完成后立即启动(延迟50毫秒).这种延迟将不断积累.

所以在Java世界中这类似于scheduleAtFixedRate().如果您需要scheduleWithFixedDelay()行为,则必须在setTimeout()每次完成时使用并重新安排回调:

function callback() {
    //long running code
    setTimeout(callback, 1000);
}
setTimeout(callback, 1000);
Run Code Online (Sandbox Code Playgroud)

callback()无论运行多长时间,上面的代码将在完成再次启动之后等待1000毫秒.