[英]How to loop setTimeout() and how to stop the loop
我有一个 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_function 之外和 if() 语句中放置了另一个 clearTimeout() 来捕获停止操作并运行 clearTimeout() 但它不起作用。
我可以启动它,循环会相应地运行,但我无法让它停止。 提前致谢,
首先,如果这引起混淆, setTimeout
不会返回一个函数,而是一个整数 id。 当您将该 id 传递给clearTimeout
它不会执行传递给setTimeout
回调函数。 但是clearTimeout
只会清除与传递给它的 id 关联的函数,而不是可能同时处于活动状态的任何其他计时器。
因此,在第 6 行,当您再次调用setTimeout
时,您并没有保存它在任何地方返回的 id,因此您无法清除它,因此无论您是否清除了第 3 行的setTimeout
函数,它都会执行。
现在的问题是:您可以尝试使用超时来做什么,但我认为使用类似的函数setInterval
会容易得多。 它的工作方式与 timeout 完全相同,但它会在一个时间间隔内无限期地执行传递给它的函数,直到它被清除为止。
这样你就可以
const intervalID = setInterval (() => {
primaryTestFunction(param1, param2, param3);
}, 10000);
然后在您想停止它时clearInterval(intervalID)
。
var loop1 = setInterval(()=> { if(action == 'start'){ primaryTestFunction(param1, param2, param3); setTimeout(start, 10000); } else{ clearInterval(loop1); } },100);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.