【问题标题】:Periodic pausing of a setInterval loop in javascript [duplicate]javascript中setInterval循环的定期暂停[重复]
【发布时间】:2015-12-02 23:43:02
【问题描述】:

我想知道是否有办法“暂停”javascript setInterval 命令,然后在几秒钟后恢复它,然后通过循环,暂停一段时间,再次开始循环,再次暂停等。 ?换句话说,当一个逻辑条件正确时,暂停一段时间后再重新开始?

使用伪代码,我在想这样的事情:

setInterval(fn, 1000);

pausecondition = false;

fn()
{
  // do stuff, including pausecondition

  if (pausecondition == true)
  {
     // pause for two seconds
     // pausecondition = false
   }
}

我正在尝试的是每 1000 毫秒工作一次的 setInterval,然后当暂停条件为真时,该函数暂停两秒,然后 setInterval 像以前一样每 1000 毫秒恢复一次。

【问题讨论】:

    标签: javascript setinterval


    【解决方案1】:

    像这样使用setTimeout函数怎么样?

    var pausecondition = false;
    var fn = function (){
      if (pausecondition) {
        setTimeout(function(){
          pausecondition = false;
          fn();
        }, 2000);
       } else {
         // no pause, run logic
       }
    }
    
    setInterval(fn, 1000);
    

    【讨论】:

    • 谢谢夹竹桃。请问我可以问一个问题吗?我检查了一些 javascript 网站,上面说 setTimeout 只能使用一次;是这样吗?我问的原因是我希望我的代码每 1000 毫秒运行一次,然后在一段时间后暂停 2000 毫秒,然后每 1000 毫秒恢复一次,然后暂停,然后再次启动,等等。
    • @EventHorizo​​n 简而言之;是的,您可以运行乘法setTimeout。从您的角度来看,setTimeout 似乎在并行运行,因为 javascript 在后台使用事件循环而不是线程。但这不是您在上面的示例中必须考虑的事情。
    • 谢谢!事实证明,我想做的事情引发了一大堆其他问题,所以我简化了我的方法(也使代码更具可读性)
    • @EventHorizo​​n 太棒了!如果您认为正确,请不要忘记接受答案
    • 干杯伙伴,没问题!
    【解决方案2】:
    var pauseCondition = {
        enabled: false,
        counter: 0,
        countTo: 2,
    };
    

    递增和检查计数器 >= countTo

    【讨论】:

      猜你喜欢
      • 2014-04-05
      • 1970-01-01
      • 1970-01-01
      • 2019-04-15
      • 1970-01-01
      • 2022-11-30
      • 1970-01-01
      • 2014-09-05
      • 1970-01-01
      相关资源
      最近更新 更多