【问题标题】:How to set an interval, but then stop it after 20 minutes如何设置间隔,但在 20 分钟后停止
【发布时间】:2012-10-17 16:11:28
【问题描述】:

目前在我的网页上,我有一个每 30 秒运行一次功能的计时器:

setInterval("someFunction(userId)", 30000);   

这很好用,但问题是如果 100 名用户打开浏览器(比如他们去吃午饭时),它将轮询我们的系统并无缘无故地增加我们服务器上的负载。

如何在 20 分钟后停止此计时器的运行?

【问题讨论】:

  • 将函数传递给setInterval,而不是字符串。
  • 不要使用字符串作为setIntervalsetTimeout的第一个参数
  • @Quentin 字符串有什么问题?现在工作正常吗?
  • @user1361315 在 JavaScript 中使用 eval 是一种不好的做法。

标签: javascript jquery


【解决方案1】:

只需将超时设置为 20 分钟即可清除间隔:

var interval = setInterval(function() {
    someFunction(userId);
}, 30000);

setTimeout(function() {
    clearInterval(interval);
}, 1000 * 60 * 20);

【讨论】:

  • 我建议在代码中加入事件监听器,否则代码会在 20 分钟后停止运行,即使用户正在积极使用该网站。
【解决方案2】:

当您调用setInterval 时,您会得到一个返回值,它是运行间隔的句柄。

因此解决方案是安排另一个关闭,这将阻止此间隔运行:

var interval = setInterval("someFunction(userId)", 30000);  
setTimeout(function(){ clearInterval(interval) }, 20 * 60 * 1000);

【讨论】:

    【解决方案3】:

    将间隔设置为变量。

    设置另一个计时器以重置该间隔,或在 20 分钟后为您的轮询脚本设置禁用标志。

    【讨论】:

      【解决方案4】:

      试试这个:

      var intervalId= setInterval(function(){
         someFunction(userId);
       }, 30000); 
      
      setTimeout(function(){
         clearInterval(intervalId);
      },20*60*1000);
      

      setInterval 返回一个 intervalId,您可以使用它稍后传递给 clearInterval

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-02
        • 1970-01-01
        • 1970-01-01
        • 2019-08-01
        • 2022-01-25
        • 2019-11-24
        • 2016-07-23
        相关资源
        最近更新 更多