2013-08-30 70 views
0

我有一個事件,我每5秒觸發一次以檢查文件是否已完成處理。在第一次迭代後,在Internet Explorer中,setTimeout不會觸發

我做了以下內容:

if (InSuppArray(item.Id) == false && item.Status() == "Queue") { 
    var t = setTimeout(function() { checkQueuedSupp(item.OrderId) }, 5000); 
    suppIds.push({ Id: item.OrderId, TimerId: t }); 
} 

基本上,多個文件可以上傳所以這次創建的定時器陣列,並殺死他們作爲文件完成。

這在Firefox和Chrome中運行良好,但計時器只在Internet Explorer中啓動一次。

有沒有更好的方法來做到這一點?我搜索了一下,發現了IE和setTimeout的一些問題,但其中大多數都暗指這樣的事實,即它從來沒有在IE中工作,至少我的火一次。

+3

而不是創建多個超時,而是使用'setInterval',它會每隔5秒調用一次你的函數,直到你終止它爲止。 – Cfreak

+2

我知道絕對沒有與'setTimeout'和IE有關的問題。你的問題一定在別的地方。 – plalx

+0

你在頭文件中提到的引起迭代的問題在哪裏?您發佈的代碼段中沒有迭代。 – Teemu

回答

0

1)正在爲第一次迭代工作?是的,你的代碼工作正常。

2)如果重複然後是你的問題檢查以下內容:

setTimeout是不是重複的方法。請使用setInterval

if (InSuppArray(item.Id) == false && item.Status() == "Queue") { 
    var t = setInterval(function() { checkQueuedSupp(item.OrderId) }, 5000); 
    suppIds.push({ Id: item.OrderId, TimerId: t }); 
} 

爲了setTimeout爲重複,儘量做到有recursive

+0

有趣的是,似乎5000毫秒在FF/Chrome和IE中略有不同,因爲它似乎在那裏工作,因爲它們總是最終讀取成功消息,而IE不會。謝謝您的幫助! – zach

0

setTimeout是延遲執行函數,而不是重複執行它。你想要的是setInterval,它會在你指定的每個時間間隔內執行你的函數。

相關問題