3

我们有一个每月运行一次 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>
4

1 回答 1

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

这非常接近 0x80000000,我想知道 32 但在某处有符号的算术是否可能是负责任的。

我刚刚检查了规范和超时,setInterval并且setTimeout都被定义为long值,这意味着有符号的 32 位。目前尚不清楚如何处理负超时值。

来自WhatWG规范:

long setTimeout(Function handler, optional long timeout, any... arguments);

WebIDL标准:

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

为了解决您的问题,我可以提出两个建议:

由于setTimeout工作,使用它并在处理功能结束时重新触发

或者setInterval您想要的一半时间并使用切换每隔一次执行您的代码。

于 2013-06-21T10:31:51.683 回答