Javascript 如何循环setTimeout()以及如何停止循环
我有一个setTimeout()循环,它工作得很好,只是我不知道在需要它时如何停止 我读过一些类似的帖子,但由于某些原因,我无法使这些解决方案适合我的情况,希望有人能帮助我Javascript 如何循环setTimeout()以及如何停止循环,javascript,jquery,settimeout,Javascript,Jquery,Settimeout,我有一个setTimeout()循环,它工作得很好,只是我不知道在需要它时如何停止 我读过一些类似的帖子,但由于某些原因,我无法使这些解决方案适合我的情况,希望有人能帮助我 var timeout_function; function testFunction(param1, param2, param3, action){ timeout_function = setTimeout(function start() { if(action == 'start'){
var timeout_function;
function testFunction(param1, param2, param3, action){
timeout_function = setTimeout(function start() {
if(action == 'start'){
primaryTestFunction(param1, param2, param3);
setTimeout(start, 10000);
}else{
clearTimeout(timeout_function);
}
}, 10000);
}
好的,这样的想法是,当我运行testFunction()时,它包含了“开始”动作,setTimeout()循环将开始,当我再次运行testFunction()时,但如果是“停止”动作或其他类似动作,它应该通过运行clearTimeout()来打破循环,但事实并非如此
我甚至在timeout_函数外和if()语句中放置了另一个clearTimeout()来捕获停止操作并运行clearTimeout(),但它不起作用
我可以启动它,循环也会相应地运行,但我不能让它停止。
提前感谢,首先,为了避免造成混淆,
setTimeout
不返回函数,而是返回整数id。当您将该id传递给cleartimout
时,它将不会执行传递给setTimeout
的回调函数。但是clearTimeout
将只清除与传递给它的id相关联的函数,而不会清除任何其他可能同时处于活动状态的计时器
因此,在第6行,当您再次调用setTimeout
时,不会将它返回的id保存在任何地方,因此您无法清除它,因此无论您是否清除第3行的setTimeout
函数,它都将执行
现在来问一个问题:您可能想知道超时是怎么回事,但我认为使用类似的函数setInterval
会容易得多。它的工作方式与timeout完全相同,但它以一个间隔无限期地执行传递给它的函数,直到清除为止
这样你就可以
const intervalID=setInterval(()=>{
primaryTestFunction(参数1、参数2、参数3);
}, 10000);
然后当您想停止它时,clearInterval(intervalID)
。
var loop1=setInterval(()=>{
如果(操作=='start'){
primaryTestFunction(参数1、参数2、参数3);
设置超时(开始,10000);
}
否则{
clearInterval(循环1);
}
},100);代码>感谢您的一些澄清。至于我为什么使用setTimeout而不是setInterval,是因为setInterval将运行我传递的函数,即使它在上一次尝试中没有完成。在上一个任务完成之前,setTimeout不会执行。此外,我将setTimeout保存到一个变量中,并将其传递给clearTimeout。这里有一行“timeout\u function=setTimeout(function start(){})”,我想这就是你刚才指出的。我可以知道第一个循环以setInterval()而不是setTimeout()开始有什么区别吗?setInterval本身就是一个循环,而setTimeout只运行一次。