javascript setInterval设置延迟?

时间:2013-06-21 10:18:53

标签: javascript setinterval

我们有一个每月运行一次java脚本线程的用例。但我们观察到的是,如果我们为setinterval函数提供3.5周的延迟,它就不会尊重它并开始每秒调度一次。这是一个错误吗?它是否有延迟的最大限制?

有趣的是,同样适用于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 个答案:

答案 0 :(得分:1)

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

这非常接近0x80000000,我想知道32或者某个地方的签名算术是否有责任。

我刚检查了规范,setIntervalsetTimeout的超时都被定义为long值,这意味着签名为32位。目前尚不清楚如何处理负超时值。

来自WhatWG规范:

  

long setTimeout(函数处理程序,可选的长超时,任何...   参数);

来自WebIDL标准:

  

long类型是有符号整数类型,其值在该范围内   [-2147483648,2147483647]。

要解决您的问题,我可以提出两点建议:

由于setTimeout有效,请在处理函数结束时使用它并重新触发

或者setInterval,只需要一半的时间,并使用切换来每隔一段时间执行一次代码。