2011-10-04 34 views
15

在我的应用我发现,使用setInterval 0毫秒一些JavaScript代码,像这样的行为。任何人都可以告诉我这里的setInterval的行为是什么? (“myFunction”向服务器发出AJAX呼叫)的setInterval()0毫秒在JavaScript

我在问这是因为我的应用程序中存在不规则行为。 90%的时间,应用程序的行为是正确的,并且只有一次调用服务器。然而有时候,多次调用服务器(到目前为止,最多是48次调用),我几乎可以肯定这是这行代码的错误。

回答

17

浏览器为间隔设置最小值。 Usualy 10ms,但它可以依赖于浏览器。这意味着重复这个尽可能快,因为我可能被允许。 W3C规范说4ms:http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#timers

这是正确的,但可能会显示设计错误。

编辑:顺便说一句,传递一个字符串setTimeout/setInterval是一个不好的做法,而不是传递一个函数,因为JavaScript具有头等功能。

+0

是的,我认为不管是谁打算调用setTimeout()来代替。我会改变它。 –

0

把它稍作延迟只执行一次,使用setTimeOut代替:

window.setTimeout(myFunction, 10); 

当你正在使用AJAX,你不必使用任何计时器在所有 - 只是调用下一个AJAX请求在当前AJAX请求的回调(完成/成功事件)中。

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

+0

我相信setTimeout()是编码器的意图,因为在这里多次调用服务器没有任何意义。 –

0

我假设在myFunction()有一个clearInterval

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

改为使用setTimeout

+0

没有clearInterval :(。我相信这是一个编码错误,我将切换到setTimeout。谢谢 –

1

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

+0

@Brad我认为“除了它可以用clearInterval清除”是重要的:P –

+0

我在想它是一个SO的错误,当做多个编辑它回滚一个或一些东西时:P –

+0

@Joseph,你是什么意思?我没有编辑任何他的答案,我只是在相关部分添加代码标签。 – Brad