Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript setTimeout在给定时间内立即执行_Javascript_Settimeout - Fatal编程技术网

Javascript setTimeout在给定时间内立即执行

Javascript setTimeout在给定时间内立即执行,javascript,settimeout,Javascript,Settimeout,有没有办法让setTimeout立即运行,然后在给定时间再次运行。例如,我希望此updateItemsCache函数在加载时运行,然后每3秒再次运行一次 现在每3秒执行一次。 函数updateItemsCache(){ 设置超时(()=>{ //做事 }, 30000); } 不,只需创建一个函数并在超时前调用一次,在超时内调用一次 function updateItemsCache(){ innerLogic() setTimeout(innerLogic, 30000); } f

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

现在每3秒执行一次。
函数updateItemsCache(){
设置超时(()=>{
//做事
}, 30000);
}

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

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

}

function innerLogic(){

}

如果我正确理解了您的问题,您可以按如下所示构造代码以实现此目的

总之,您可以通过
setTimeout(迭代,3000)以固定的3秒间隔调用函数(即
doStuff()
其中
迭代
是一个功能:

  • 调用您希望每隔3秒执行的自定义应用程序逻辑
  • 安排下一次迭代(即在未来3秒钟内进行)
此模式还确保逻辑立即运行,并且在第一次执行后每隔3秒运行:

constdostuff=()=>{
log(`dostuff at${Date.now()}`);
}
函数updateItemsCache(){
/*
定义调用您的
“东西”逻辑
*/
常量迭代=()=>{
doStuff();
/*
使用setTimeout()计划下一次迭代
在未来3秒时(这将导致
以3秒为间隔重复的迭代)
*/
setTimeout(迭代,3000);
}
/*
开始称为“东西”逻辑的迭代
立即,并重新安排另一个迭代
*/
迭代();
}
updateItemsCache();

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

那么您所要做的就是调用您的timeoutFunction()

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


感谢您提供这段代码片段,它可能会提供一些有限的、即时的帮助。A通过展示为什么这是一个很好的解决问题的方法,并将使它对未来有其他类似问题的读者更有用。请在您的答案中添加一些解释,包括您所做的假设。Sry,添加了解释!
const timeoutFunction = () => {
    setTimeout(() => {
        //do stuff
        timeoutFunction();
    }, ms);
}
timeoutFunction();