JavaScript 中 0 毫秒的 setInterval() 行为

IT技术 javascript setinterval
2021-03-13 20:07:08

在我的应用程序中,我发现了一些使用setInterval0 毫秒的JavaScript 代码,如下所示:

self.setInterval("myFunction()",0);

显然,这对我来说似乎不是一个好主意。谁能告诉我setInterval这里的行为是什么?(“myFunction”对服务器进行 AJAX 调用)

我问这个是因为我在我的申请中有不正常的行为。90% 的情况下,应用程序运行正常,并且只调用一次服务器。但是,有时会向服务器发出多次调用(到目前为止,最多调用 48 次),我几乎可以肯定这是这行代码的错误。

5个回答

浏览器为间隔设置一个最小值。通常为 10 毫秒,但它可能取决于浏览器。这意味着尽可能快地重复这个。W3C 规范说 4 毫秒:http : //www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#timers

这是正确的,但可能揭示了设计错误。

编辑:顺便说一下,将字符串传递给 setTimeout/setInterval 是不好的做法,而是传递一个函数,因为 javascript 具有一流的函数。

是的,我认为无论是谁做的,都应该调用 setTimeout() 来代替。我会改变它。
2021-04-24 20:07:08

setInterval(myFunction, 0)myFunction以最小的延迟连续呼叫这几乎就像myFunction在无限循环中调用除了在这里您可以使用该clearInterval方法停止循环

错了,看我的回答就知道为什么,以后不知道的就不要回答了,这比什么都不说更糟糕,因为它具有误导性。
2021-04-19 20:07:08
@Brad 我认为“除非可以用clearInterval清除它很重要:P
2021-04-25 20:07:08
@约瑟夫,你是什么意思?我没有从他的回答中编辑任何内容,我只是在相关部分周围添加了代码标签。
2021-04-26 20:07:08
@Brad 一定是一个像纳伦德拉说的那样的错误。它只会在您在编辑历史记录中删除它时显示。
2021-05-04 20:07:08
我在想这是一个错误,所以在进行多次编辑时它会回滚一个或其他东西:P
2021-05-09 20:07:08

要使其仅以轻微延迟执行一次,请setTimeOut改用:

window.setTimeout(myFunction, 10);

当您使用 AJAX 时,您根本不必使用任何计时器 - 只需在当前 AJAX 请求的回调(完成/成功事件)中调用下一个 AJAX 请求。

发布您当前的代码,我们或许可以为您提供进一步的指导。

我相信 setTimeout() 是编码器想要做的,因为在这里多次调用服务器是没有意义的。
2021-05-07 20:07:08

我假设myFunction()里面有一个clearInterval.

基本上,您已经设置了一个尽可能经常发生的间隔。如果执行 JavaScript 的浏览器clearInterval在下一次间隔迭代之前真正到达了那部分,那就没问题了。否则,它会一次又一次地发生。

使用setTimeout来代替。

没有 clearInterval :( 。我相信这是一个编码错误。我将切换到 setTimeout。谢谢
2021-04-28 20:07:08

setInterval with '0' 在当前线程的末尾移动代码执行。代码放在一边,线程中的其他所有代码都被执行,当没有代码执行时,则执行边代码。