setTimeout不能太长

Can setTimeout be too long?

本文关键字:不能 setTimeout      更新时间:2023-09-26

我正在创建一个应用程序,用于轮询服务器以获取特定更改。我使用了一个使用setTimeout的自调用函数。基本上是这样的:

<script type="text/javascript">
someFunction();
function someFunction() {
  $.getScript('/some_script');
  setTimeout(someFunction, 100000);
}
</script>

为了降低服务器上的轮询强度,我希望有更长的超时间隔;可能在1分钟到2分钟的范围内。是否存在setTimeout的超时时间过长而无法正常工作的情况?

您在技术上还可以。您可以有长达24.8611天的超时时间如果你真的想的话。setTimeout可以高达2147483647毫秒(32位整数的最大值,大约是24天),但如果它高于这个值,你会看到意外的行为。请参阅为什么setTimeout()"中断";对于大的毫秒延迟值?

对于像轮询这样的间隔,我建议使用setInterval,而不是递归的setTimeout。setInterval可以执行您想要的轮询操作,而且您还可以进行更多的控制。示例:要随时停止间隔,请确保存储了setInterval的返回值,如下所示:

var guid = setInterval(function(){console.log("running");},1000) ;
//Your console will output "running" every second after above command!
clearInterval(guid) 
//calling the above will stop the interval; no more console.logs!

setTimeout()使用32位整数作为其延迟参数。因此,最大值为:

2147483647

与其使用递归setTimeout(),我建议使用setInterval():

setInterval(someFunction, 100000);
function someFunction() {
   $.getScript('/some_script');
}