有没有办法让setTimeout
立即运行,然后在给定的时间再次运行。例如,我希望此updateItemsCache函数在加载时运行,然后每3秒再次运行。
它仅每3秒执行一次。
function updateItemsCache(){
setTimeout(() => {
//do stuff
}, 30000);
}
答案 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秒间隔内运行:
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();