Javascript 的函数 setInterval 块会返回吗?



我有一个javascript函数function a(),我想每10秒执行一次。
我发现我可以使用setInterval,这样我就可以执行以下操作:setInverval(a, 10000);
我的问题如下:
这是否意味着
i) 每 10 秒调用一次指定的函数(无论之前的执行是否正在运行/多线程方式)或
ii) 调用该函数,当该函数完成执行后,该函数的下一次调用计划在 10 秒后?
我基本上对选项 2 感兴趣。如果选项 1 是默认发生的事情,那么我如何实现选项 2?

基本上,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 的单线程性质,该函数也永远不会并发运行。

setInterval(a, 10000)计划每 10 秒调用一次函数,无论它之前的调用完成时间如何。如果要将下一次调用安排在最后一次调用完成后的 10 秒内,则应在 a 函数本身中调用setTimeout(a, 10000),而不是使用 setInterval

相关内容

  • 没有找到相关文章

最新更新