如何在javascript中处理值大于最大值的setTimeout()函数。
<html>
<body>
<button onclick="funCall()">Try it</button>
<script>
function funCall()
{
setTimeout(function(){alert("Hello")},3147483647);
}
</script>
</body>
</html>
答案 0 :(得分:2)
这似乎有效:
(function () {
var timers = {};
var id = 0;
var maxT = 1000; // can go up to (1 << 30)
window.setLongTimeout = function (f, t) {
var args = [].slice.call(arguments, 2);
var now = (Date.now && Date.now()) || +(new Date);
var end = now + t;
var myid = ++id;
(function loop() {
var now = (Date.now && Date.now()) || +(new Date);
var delta = end - now;
if (delta <= 0) {
delete timers[myid];
f.apply(null, args);
} else {
timers[myid] = window.setTimeout(loop, Math.min(maxT, delta));
}
})();
return id;
};
window.clearLongTimeout = function (myid) {
window.clearTimeout(timers[myid]);
delete timers[myid];
};
})();
它会定期触发超时,直到最初指定的时间(不限制为32位)为止。
如果您尝试使用它超过2 ^ 52
毫秒,则会出现精度错误; - )
答案 1 :(得分:0)
setTimeout使用32位signed int来存储延迟,因此每个数字都不起作用,代码会立即执行。
您可以创建一个具有最大值的setTimeout,并使用最大值调用函数内的另一个setTimeout。