【问题标题】:How to make a setTimeout to call a setInterval to make it execute after some time?如何让 setTimeout 调用 setInterval 使其在一段时间后执行?
【发布时间】:2021-07-27 01:13:35
【问题描述】:

我希望我的doSomething 在与setIntervalinterval 不同的一段时间后执行,所以我使用了setTimeout(doSomething, 5000);,所以我可以在说5 秒后调用doSomething,但这并没有似乎没有发生。

关于我需要使用clearIntervalsetInterval 在我声明的条件下停止执行,并且我需要有一个interval 时间让setInterval 与@987654330 的延迟不同@执行开始,如何让doSomething在5秒后开始执行?

function doSomething() {
  let a = 1;
  return setInterval(() => {
    console.log(a);
    if (a < 6) {
      a++;
    } else {
      return a = 1;
      clearInterval(id);
    }
  }, 1000);
}

var id = doSomething();
setTimeout(doSomething, 5000);

【问题讨论】:

    标签: javascript function setinterval delay clearinterval


    【解决方案1】:

    尝试这样做

    function doSomething() {
            let a = 1;
            return setInterval(() => {
                console.log(a);
                if (a < 6) {
                    a++;
                } else {
                    clearInterval(id)
                    return a = 1;
                }
            }, 1000);
        }
    
        var id = doSomething();
        setTimeout(doSomething, 5000);
    

    【讨论】:

    • 结果没有区别!
    【解决方案2】:

    var id = doSomething(); 立即调用该函数(并因此开始间隔)。 由于setInterval()clearInterval() 都在同一个函数中,所以不需要返回区间ID。只需在函数中本地跟踪它。这样你只需要调用doSomething(),它就会自动启动和停止。

    最后,请注意setInterval() 的第一次调用不会立即执行,还会等待给定的延迟。因此,如果您希望第一次调用在 5 秒后进行,则需要从 setTimeout()5000 中减去 setInterval()1000。 (或者也可以立即手动调用重复的函数。)

    function doSomething() {
      let a = 1;
      let intervalId = setInterval(() => {
        console.log(a);
        if (a < 6) {
          a++;
        } else {
          clearInterval(intervalId);
        }
      }, 1000);
    }
    
    setTimeout(doSomething, 4000);

    【讨论】:

    • 感谢您解决了我的问题并专门与我分享您的知识!
    • 这里有个小问题,如何在 else 条件中设置a = 1
    • @christy 就是这样,但不会有任何效果。 a 变量的范围在 doSomething() 函数内。当功能完成并清除间隔时,它就不再存在了。无法访问,最终会被garbage collector收集。
    • 学到了新东西,祝福你! :)
    【解决方案3】:

    setTimeout 运行 doSomething 约 4s 延迟
    doSomething 做第一个console.log 大约1s 延迟
    所以第一个console.log在4s + 1s == 5s延迟后开始

    function doSomething() {
      let a = 1
        , id = setInterval(() => {
              console.log(a++);
              if (a > 5)  clearInterval(id);
            }, 1000);
      }
    setTimeout( doSomething, 4000);

    【讨论】:

      【解决方案4】:

      首先。如果您调用创建间隔的函数,它将创建一个间隔。如果不使用超时,则不能调用该函数并期望它有超时。

      这行得通:

      function foo() {
          var i = 0;
          var iId = setInterval(() => {
              console.log('Hello World -' + i);
              i++;
              if (i > 5) {
                  clearInterval(iId);
              }
          }, 1000);   
      }
      

      然后:

      setTimeout(() => { foo(); }, 5000)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-07-01
        • 2012-02-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多