有一个需求 每间隔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);
3 回答
蛊毒传说
TA贡献1895条经验 获得超3个赞
你每次调用setTimeout都会创建一个定时器啊……如果你只清除最后一个定时器的话没有用
一种解决办法是维护一个定时器列表,按钮关闭的时候对整个列表调用clearTimeout
第二种方法是维护一个“需要定时刷新”Flag,计时器内的函数通过setTimeout递归调用自身,并在递归前检查这个Flag,如果Flag被按钮置为false就退出递归
PIPIONE
TA贡献1829条经验 获得超9个赞
如果是要每隔十秒触发一次,50次后终止,为何不用setInterval呢?
let count = 50let intervalKey = setInterval(() => { // do things console.log('do') if (--count === 0) clearInterval(intervalKey) }, 10 * 1e3)
添加回答
举报
0/150
提交
取消