为了账号安全,请及时绑定邮箱和手机立即绑定

如何停止for循环中的setTimeout?

如何停止for循环中的setTimeout?

米琪卡哇伊 2018-08-18 15:08:46
有一个需求 每间隔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 回答

?
慕慕731940

TA贡献1条经验 获得超0个赞

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

查看完整回答
反对 回复 2019-08-20
?
蛊毒传说

TA贡献1895条经验 获得超3个赞

你每次调用setTimeout都会创建一个定时器啊……如果你只清除最后一个定时器的话没有用

一种解决办法是维护一个定时器列表,按钮关闭的时候对整个列表调用clearTimeout
第二种方法是维护一个“需要定时刷新”Flag,计时器内的函数通过setTimeout递归调用自身,并在递归前检查这个Flag,如果Flag被按钮置为false就退出递归


查看完整回答
反对 回复 2018-08-19
?
PIPIONE

TA贡献1829条经验 获得超9个赞

如果是要每隔十秒触发一次,50次后终止,为何不用setInterval呢?

let count = 50let intervalKey = setInterval(() => {  // do things
  console.log('do')  if (--count === 0) clearInterval(intervalKey)
}, 10 * 1e3)


查看完整回答
反对 回复 2018-08-19
  • 3 回答
  • 0 关注
  • 1757 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信