14

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

<script type="text/javascript">
someFunction();

function someFunction() {
  $.getScript('/some_script');
  setTimeout(someFunction, 100000);
}
</script>

为了使服务器上的轮询不那么密集,我希望有更长的超时间隔;也许在 1 分钟到 2 分钟范围内的某个地方。是否存在 setTimeout 的超时时间过长且不再正常工作的时间点?

4

2 回答 2

14

你在技术上没问题。您最多可以有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!
于 2012-09-10T12:20:29.203 回答
3

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

2147483647

setTimeout()我建议不要使用递归,而是使用setInterval()

setInterval(someFunction, 100000);

function someFunction() {
   $.getScript('/some_script');
}
于 2012-09-10T12:20:14.947 回答