我有一个javascript函数function a()
,我希望每10秒执行一次
我发现我可以使用setInterval
,以便我可以执行以下操作:setInverval(a, 10000);
我的问题如下:
这是否意味着
i)每隔10秒调用指定的函数(无论先前的执行是否正在运行/多线程方式)或
ii)调用该函数,当此函数完成执行时,该函数的下一次调用将在10秒后进行调度?
我基本上对选项2感兴趣。如果选项1是默认情况下发生的事情那么我怎样才能实现选项2?
答案 0 :(得分:5)
基本上,setInterval
根据选项1运行,除非如果函数占用的时间超过间隔时间,则在完成并到达下一个滴答之前不会再次触发。例如,如果你的间隔为1秒而你的函数需要1.5秒,它将在2秒钟的时间内运行。
如果您想要选项2的行为(在功能完成后运行X秒),请在功能完成时调用setTimeout
:
setTimeout(function a() {
// your own code
setTimeout(a, 1000);
}, 1000);
这是如何工作的,它首先等待1秒,然后调用传递给setTimeout
的函数。在函数结束时,函数本身(a
是函数的名称)被传递给setTimeout
,然后等待另一秒再次调用函数。这将一直持续到JavaScript执行停止或使用clearTimeout
删除超时。
请注意,即使您使用setInterval
,由于JavaScript的单线程特性,该函数也将永远不会同时运行。
答案 1 :(得分:2)
setInterval(a, 10000)
计划每10秒调用一个函数,无论其先前的调用完成的时间如何。如果您想在完成最后一次通话后安排下一次通话10秒钟,则应在setTimeout(a, 10000)
功能本身内,在其返回之前致电a
,而不是使用setInterval