如果延迟超过 2147483648 毫秒,setTimeout 会立即触发

2024-01-28

问题

If the delay超过 2147483648 毫秒(24.8551 天)该函数将立即触发。

Example

setTimeout(function(){ console.log('hey') }, 2147483648) // this fires early
setTimeout(function(){ console.log('hey') }, 2147483647) // this works properly

我在 Chrome v26 和 Node.js v8.21 下尝试过


setTimeout的上限为0x7FFFFFFF (or 2147483647十进制)

这是因为 setTimeout 使用 32 位整数来存储其延迟值,因此任何超过该值的值都会导致问题

如果您想要在 X 天后触发超时,您可以尝试使用setInterval相反,使用较低的延迟值,如下所示

function setDaysTimeout(callback,days) {
    // 86400 seconds in a day
    var msInDay = 86400*1000; 

    var dayCount = 0;
    var timer = setInterval(function() {
        dayCount++;  // a day has passed

        if(dayCount == days) {
           clearInterval(timer);
           callback.apply(this,[]);
        }
    },msInDay);
}

然后你会像这样使用它

setDaysTimeout(function() {
     console.log('Four days gone');
},4); // fire after 4 days
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果延迟超过 2147483648 毫秒,setTimeout 会立即触发 的相关文章

随机推荐