JavaScript中0毫秒的setInterval()行为

JavaScript中0毫秒的setInterval()行为,javascript,setinterval,Javascript,Setinterval,在我的应用程序中,我发现一些JavaScript代码在0毫秒内使用setInterval,如下所示: self.setInterval("myFunction()",0); 显然,这对我来说不是个好主意。有人能告诉我setInterval在这里的行为是什么吗?(“myFunction”对服务器进行AJAX调用) 我问这个问题是因为我在申请中有不正常的行为。90%的情况下,应用程序运行正常,并且只对服务器进行了一次调用。但是,有时会对服务器进行多次调用(到目前为止,最多48次调用),我几乎可以肯

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

self.setInterval("myFunction()",0);
显然,这对我来说不是个好主意。有人能告诉我
setInterval
在这里的行为是什么吗?(“myFunction”对服务器进行AJAX调用)


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

要使它只执行一次,并且有较小的延迟,请使用
setTimeOut

window.setTimeout(myFunction, 10);
在使用AJAX时,根本不需要使用任何计时器——只需在当前AJAX请求的回调(完成/成功事件)中调用下一个AJAX请求


发布您当前的代码,我们可能会进一步指导您。

我假设在
myFunction()
中有一个
clearInterval

基本上,您已经设置了一个尽可能频繁发生的间隔。如果执行JavaScript的浏览器在间隔的下一次迭代之前实际到达
clearInterval
部分,那么就可以了。否则,它将一次又一次地发生


改用
setTimeout

setInterval(myFunction,0)
以最小延迟连续调用
myFunction
。这几乎就像在无限循环中调用
myFunction
。除此之外,您可以使用
clearInterval
方法停止循环。

浏览器为间隔设置最小值。通常为10毫秒,但这取决于浏览器。这意味着尽可能快地重复这个过程。W3C规范说4ms:

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


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

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

@Brad我认为“除非它可以用
clearInterval
清除”很重要:PI认为这是一个bug,所以在进行多个编辑时,它会回滚一个或多个:P@Joseph,什么意思?我没有从他的答案中编辑任何内容,只是在相关部分添加了代码标签。错了,请查看我的答案以了解原因,并避免回答将来不知道的问题,这比什么都不说更糟糕,因为这会误导人。@Brad一定是像Narendra当时说的那样的错误。当你在编辑历史记录中删除它时,它就会显示出来。是的,我想不管是谁做的,都是想调用setTimeout()。我会更改它。我相信setTimeout()是编码器的本意,因为在这里多次调用服务器是没有意义的。没有clearInterval:(。我认为这是一个编码错误。我将切换到setTimeout。谢谢