我有一个 javascript 函数 function a()
我想每 10 秒执行一次。
我发现我可以使用 setInterval
这样我就可以做类似的事情:setInverval(a, 10000);
我的问题如下:
这是否意味着
i) 每 10 秒调用指定的函数(不管之前的执行是否正在运行/多线程方式)或
ii) 该函数被调用,当该函数完成执行时,该函数的下一次调用安排在 10 秒后?
我基本上对选项 2 感兴趣。如果选项 1 是默认情况下发生的情况,那么我如何实现选项 2?
最佳答案
基本上,setInterval
根据选项 1 运行,除了如果函数花费的时间超过间隔时间,它将不会再次触发,直到它完成并到达下一个 tick。例如,如果您的间隔为 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 的单线程特性,该函数永远不会并发运行。
关于javascript - Javascript 的 setInterval block 是否返回函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21953468/