有没有办法让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(){
}
如果我没有理解你的问题,你可以如下图所示这种结构的代码。
总之,你可以调用一个函数上通过doStuff()
定期3秒间隔(即setTimeout(iteration, 3000);
),其中iteration
是一个功能是:
这种模式还确保所述逻辑被立即运行两者,并且在超过所述第一执行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,您所需的延迟时间(毫秒)后,再次运行。
const timeoutFunction = () => {
setTimeout(() => {
//do stuff
timeoutFunction();
}, ms);
}
timeoutFunction();