现在的setTimeout执行和给定的时间

问题描述 投票:2回答:3

有没有办法让setTimeout立即运行,然后在给定的时间再次运行。例如,我想这updateItemsCache的函数,在负荷下运行,然后再次运行每3秒。

现在它才刚刚执行每3秒。

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

}
javascript settimeout
3个回答
2
投票

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

没有,只是超时内创建函数和超时之前调用它一次,一旦

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

}

function innerLogic(){

}

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

0
投票

下面的代码将声明包含运行函数本身的setTimeout功能。请记住,将通话的功能,在你的setTimeout的最后一件事。

然后,所有你所要做的就是打电话给你的超时功能()。

这将确保您的代码(即您把“//做的东西”),当你调用函数运行。而且,通过调用timeoutFunction,您所需的延迟时间(毫秒)后,再次运行。

const timeoutFunction = () => {
    setTimeout(() => {
        //do stuff
        timeoutFunction();
    }, ms);
}
timeoutFunction();
© www.soinside.com 2019 - 2024. All rights reserved.