如何使 setTimeout 调用 setInterval 使其在一段时间后执行?

How to make a setTimeout to call a setInterval to make it execute after some time?

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

关于setInterval需要用clearInterval在我声明的条件下停止执行,[=13=需要interval时间] 与doSomething开始执行的延迟不同,如何让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);

尝试这样做

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);

var id = doSomething(); 立即调用函数(并因此开始间隔)。 由于 setInterval()clearInterval() 都在同一个函数中,因此不需要 return 间隔 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);

setTimeout 运行 doSomething 延迟约4s
doSomething 执行第一个 console.log 约 1 秒延迟
所以第一个console.log在4s + 1s == 5s delay

之后开始

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

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

这个有效:

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

然后:

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