繁体   English   中英

现在执行 setTimeout 并给定时间

[英]setTimeout executing now and given time

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

现在它只每 3 秒执行一次。

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

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

不,只需创建一个函数并在超时前调用一次,在超时内调用一次

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

}

function innerLogic(){

}

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

总之,您可以通过setTimeout(iteration, 3000);每隔 3 秒定期调用一个函数(即doStuff() 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();

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

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

这将确保您的代码(由“//do stuff”放置)在您调用该函数时运行。 并且,通过调用 timeoutFunction,在您想要的延迟(毫秒)之后再次运行。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM