setTimeout在Firefox中延迟

问题描述:

我一直在尝试在我的JavaScript应用程序中创建一个setTimeout循环,并且它在除firefox之外的所有浏览器中都很好用。 (我知道,旧消息) 由于某种原因,当延迟设置为500ms,1000ms或类似的东西时,setTimeout调用会延迟很长时间,大概20秒左右。我尝试了一些不同的东西,但是FF中的一切似乎都被推迟了。这两个null参数需要设置,因为它们在某些情况下可能需要使用其他值调用,也使用setTimeout调用。setTimeout在Firefox中延迟

我曾尝试:

timerMessagesRequest = setTimeout(function() { 
    getSetOfSenders(null, null); 
}, pollingDelay); 



timerMessagesRequest = setTimeout(function() { 
     getSetOfSenders(null, null); 
    }, pollingDelay, undefined); 


timerMessagesRequest = setTimeout( 
     getSetOfSenders(null, null) 
    , pollingDelay); 
+1

为什么不使用setInterval而不是setTimeout的循环? – suish 2015-02-24 08:34:31

+0

setInterval与FF更兼容吗? – 2015-02-24 08:35:40

+0

我同意@suish。 'setInterval'应该是这里使用的函数。请尝试一下。 – ArinCool 2015-02-24 08:38:40

我最终尝试了更高的轮询延迟(5000ms),并且在FF中工作得很好。在下一次调用之前,在FF中,似乎需要500ms才能让ajax请求处理。

下面的代码是的setTimeout的环的样品。

var foo = function(){ 
    setTimeout(function(){ 
    console.log("test"); 
    foo(); 
    },1000); 
}; 
foo(); 

我在FF上看不到任何问题。 所以这意味着你放的代码不会引起问题。 就像我在评论中所说的,在这种情况下,使用setInterval更好,也更难找到一个bug。 如果您需要更多的帮助,给我们更多的代码

编辑: http://www-cs-students.stanford.edu/~eparker/files/other/test_settimeout.html

这可能与为什么问题上FF仅发生的原因。 当我用FF运行页面时,我看到了短暂的滞后量,而这并不是在Chrome中发生的。

+1

'setInterval'并不总是做定时循环的最好方法。例如。如果您可能长时间运行ajax调用,可能会发生下一个调用在最后一个调用完成之前触发。 – Simon 2015-02-24 09:02:27

+0

我实际上是在ajax调用中调用它,然后重复调用它自己。我不能让setInterval工作。可能是因为 – 2015-02-24 09:04:48

+0

你确定setTimeout导致了这个问题吗?我想知道是否仅仅因为它需要很长时间才能获得ajax响应。 – suish 2015-02-24 09:08:54