2013-06-21 54 views
3

我們有一個每月運行一次java腳本線程的用例。但是我們觀察到的是,如果我們爲setinterval函數提供了3.5周的延遲,它不尊重它,並開始每秒調度一次。這是一個錯誤?它有延遲最大限制嗎?java腳本setInterval設置延遲?

有趣的是,同樣適用於setTimeOut。 -

<!DOCTYPE html> 
<html> 
<body> 

<input type="text" id="clock" /> 
<script> 
    var int=setInterval(function(){clock()},1000*60*60*24*7*3.5); 
    function clock() 
    { 
     var d=new Date(); 
     var t=d.toLocaleTimeString(); 
     document.getElementById("clock").value=t; 
    } 
</script> 

<button onclick="int=window.clearInterval(int)">Stop</button> 

</body> 
</html> 
+1

你可以說'clock'而不是'function(){clock()}'。 – elclanrs

+0

在javascript與setInterval可能會發生一些錯誤,所以會更好,如果你使用setTimeout – Givi

+0

可能重複[什麼是setInterval最大延遲?](http://stackoverflow.com/questions/12633405/what-is-the - 最大延遲換的setInterval) – K3N

回答

1
1000*60*60*24*7*3.5 = 0x7e2bce00 

這是非常接近0x80000000的,我不知道32,而是介於符號的算術運算可能會負責。

我剛剛檢查了規範,並且setIntervalsetTimeout的超時都被定義爲long值,這意味着有符號的32位。目前還不清楚如何處理消極時間價值。

WhatWG規格:

長的setTimeout(函數處理器,可選長超時,任何... 參數);

WebIDL標準:

長型的是,在範圍 [-2147483648 2147483647]的值的帶符號的整數類型。

解決您的問題,我可以提出兩點建議:

由於setTimeout作品,在處理函數的末尾使用它,並重新觸發

或者setInterval一半你想要的時期和使用切換到每隔一段時間執行您的代碼。