猿问

如何停止for循环中的setTimeout?

有一个需求 
每间隔10秒向一个div中输出一段文字,当循环50次以后从0开始重新循环直到点击关闭按钮停止循环,怎么实现呢?

下面是我之前写的代码,但是cleartimeout没有生效,因为for循环又将settimeout激活了,又什么好的方法吗?

for (let i = 0, len = this.params.playTimes + 1; i < len; i++) {    this.playText = setTimeout(() => {        this.fillText(i);        var myDate = new Date();        console.log(i,myDate.toLocaleString());
    }, i * this.params.speed * 1000);
}// setTimeout在for中被重新激活 todoclearTimeout(this.playText);


米琪卡哇伊
浏览 1820回答 3
3回答

慕慕731940

我现在也遇到相似问题,请教下解决方法

蛊毒传说

你每次调用setTimeout都会创建一个定时器啊……如果你只清除最后一个定时器的话没有用一种解决办法是维护一个定时器列表,按钮关闭的时候对整个列表调用clearTimeout第二种方法是维护一个“需要定时刷新”Flag,计时器内的函数通过setTimeout递归调用自身,并在递归前检查这个Flag,如果Flag被按钮置为false就退出递归

PIPIONE

如果是要每隔十秒触发一次,50次后终止,为何不用setInterval呢?let&nbsp;count&nbsp;=&nbsp;50let&nbsp;intervalKey&nbsp;=&nbsp;setInterval(()&nbsp;=>&nbsp;{&nbsp;&nbsp;//&nbsp;do&nbsp;things &nbsp;&nbsp;console.log('do')&nbsp;&nbsp;if&nbsp;(--count&nbsp;===&nbsp;0)&nbsp;clearInterval(intervalKey) },&nbsp;10&nbsp;*&nbsp;1e3)
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答