setTimeout现在执行并给定时间

时间:2019-02-04 23:11:52

标签: javascript settimeout

有没有办法让setTimeout立即运行,然后在给定的时间再次运行。例如,我希望此updateItemsCache函数在加载时运行,然后每3秒再次运行。

现在

它仅每3秒执行一次。

function updateItemsCache(){
  setTimeout(() => {
  //do stuff
  }, 30000);

}

3 个答案:

答案 0 :(得分:2)

https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout

否,只需创建一个函数并在超时之前调用一次,然后在超时内部调用一次

function updateItemsCache(){
  innerLogic()
  setTimeout(innerLogic, 30000);

}

function innerLogic(){

}

答案 1 :(得分:0)

如果我正确理解了您的问题,则可以如下所示构造代码。

总而言之,您可以通过doStuff()每隔3秒定期调用一个函数(即setTimeout(iteration, 3000);),其中iteration是以下函数:

  • 以3秒的间隔调用您要执行的自定义应用程序逻辑,
  • 安排下一次迭代(即在未来3秒内发生)

此模式还确保逻辑立即运行,并在首次执行后的3秒间隔内运行:

const doStuff = () => {
  console.log(`Do stuff at ${Date.now()}`);
}


function updateItemsCache(){
  
  /*
  Define iteration function that invokes your
  "stuff" logic
  */
  const iteration = () => {
    
    doStuff();
    
    /*
    Use setTimeout() to schedule the next iteration
    at 3 seconds into the future (which will cause the
    iteration to repeat on 3 second intervals)
    */
    setTimeout(iteration, 3000);
  }
  
  /*
  Start iteration which calls you "stuff" logic
  immediately, and reschedules another iteration
  */
  iteration();
}

updateItemsCache();
  

答案 2 :(得分:0)

以下代码将声明一个包含setTimeout的函数,该setTimeout可运行该函数本身。请记住,将对函数的调用作为setTimeout中的最后一项。

然后您要做的就是调用timeoutFunction()。

这将确保您在调用函数时运行您的代码(由“ // do stuff”放置)。而且,通过调用timeoutFunction,可以在所需的延迟(ms)之后再次运行。

const timeoutFunction = () => {
    setTimeout(() => {
        //do stuff
        timeoutFunction();
    }, ms);
}
timeoutFunction();