亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何停止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 關注
  • 1858 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號