Javascript 如何循环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'){

我有一个setTimeout()循环,它工作得很好,只是我不知道在需要它时如何停止

我读过一些类似的帖子,但由于某些原因,我无法使这些解决方案适合我的情况,希望有人能帮助我

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只运行一次。