2015-02-24 329 views
1

我一直在嘗試在我的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

回答

0

我最終嘗試了更高的輪詢延遲(5000ms),並且在FF中工作得很好。在下一次調用之前,在FF中,似乎需要500ms才能讓ajax請求處理。

1

下面的代碼是的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