如何使setInterval()在每次迭代之前等待一个间隔(如10秒)?

时间:2018-08-02 06:39:30

标签: javascript jquery

model.PartNumber 在Javascript中的正常行为是,它在setInterval(function() {...}, intervalInMilliseconds)毫秒后首次被调用,此后继续一次又一次地运行没有任何延迟或等待

我需要每隔10秒执行一次我的代码。下面的代码将在10秒后第一次执行该函数,然后继续一次又一次地执行它(直到clearInterval()被调用),而没有任何延迟/等待。

intervalInMilliseconds

在10秒钟的延迟后,我需要执行 每个 迭代。我该怎么办?

2 个答案:

答案 0 :(得分:2)

所以,据我所知,您希望“循环”在代码完成后10秒执行吗??如果是这样,您可以做这样的事情...

  1. 执行同步的长期运行代码
  2. 在10秒后执行另一个循环(在示例中我用了1秒)

同步示例...

var loop = () => {
  setTimeout(() => {
    doSyncWork()
    loop()
  }, 1000)
}

loop()

或异步(例如ajax)...

var loop = () => {
    setTimeout(() => {
      doAsyncWithCallback(loop)
    }, 1000)
}

loop()

或者有诺言...

var loop = () => {
    setTimeout(() => {
      doAsyncWithPromise().then(loop)
    }, 1000)
}

loop()

答案 1 :(得分:0)

  

setInterval(function(){...}的正常行为,   Javascript中的intervalInMilliseconds)被称为   intervalInMilliseconds毫秒之后的第一次,之后   继续不断运行,没有任何延迟或等待。

那不是真的。
setInterval的常见行为是每n毫秒执行一次回调。 每个回调调用都将在n毫秒之前的回调调用之后发生。
看看

let counts = 0;
let interval = setInterval(() => {
  console.log(counts % 2 == 0 ? 'tick' : 'tack');
  counts++;
  if (counts == 5)
  clearInterval(interval);
},1000);

  

我需要在10秒钟延迟后执行每次迭代。怎么能   我这样做吗?

像这样:

setInterval(callback, 10000);

每10秒调用一次回调