在我的应用程序中,我发现了一些使用setInterval
的JavaScript代码,时间为0毫秒,如下所示:
self.setInterval("myFunction()",0);
显然,这对我来说似乎不是一个好主意。谁能告诉我setInterval
这里的行为会是什么? (“myFunction”对服务器进行AJAX调用)
我问这个是因为我在我的申请中有不正常的行为。 90%的情况下,应用程序运行正常,并且只对服务器进行一次调用。但有时会对服务器进行多次调用(到目前为止,最多只有48次调用),我几乎可以肯定这是这行代码的错误。
答案 0 :(得分:18)
浏览器为间隔设置最小值。通常10毫秒,但它可以取决于浏览器。这意味着尽可能快地重复这个。 W3C规范说4ms:http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#timers
这是正确的,但可能会发现设计错误。
编辑:顺便说一句,将字符串传递给setTimeout / setInterval是不好的做法,而是传递函数,因为javascript具有第一类函数。
答案 1 :(得分:1)
setInterval(myFunction, 0)
以最小延迟连续拨打myFunction
。这几乎就像在无限循环中调用myFunction
。除此之外,您可以使用clearInterval
方法停止循环。
答案 2 :(得分:0)
要让它仅在延迟时间内执行一次,请改为使用setTimeOut
:
window.setTimeout(myFunction, 10);
当您使用AJAX时,您根本不必使用任何计时器 - 只需在当前AJAX请求的Callback(完成/成功事件)中调用下一个AJAX请求。
发布您当前的代码,我们或许可以为您提供更多指导。
答案 3 :(得分:0)
我认为在myFunction()
中有一个clearInterval
。
基本上,您已经设置了可以尽可能频繁发生的间隔。如果执行JavaScript的浏览器实际上在间隔的下一次迭代之前到达clearInterval
部分,那么它就没问题了。否则,它会一次又一次地发生。
改为使用setTimeout
。
答案 4 :(得分:0)
setInterval with '0' 在当前线程的末尾移动代码执行。代码放到一边,线程中的其他代码都执行,当没有代码执行时,则执行边代码。