Change delay while timer is running

使用 setInterval() 時,如果要更新 delay,原本我會先透過 clearInterval() 清除原本的之後再重建一個新的:

var delay = 3000
var muda = () => console.log('無駄')
var myInterval = setInterval(muda, delay)

// change the period of '無駄'
delay = 500
clearInterval(myInterval)
myInterval = setInterval(muda, delay)

說實在賊麻煩,而且我的情境是希望前一個循環能夠先跑完,下一個循環才反應新的 delay,但上面的做法會讓前一個循環被中斷,這母湯。

後來估了一下,發現可以改用 setTimeout() 來實作:

var delay = 3000

var muda = () => {
  console.log('無駄')
  setTimeout(muda, delay)
}

setTimeout(muda, delay)

// change the period of '無駄'
delay = 500

在要更新 delay 的時候直接給新的值就好。

© 2019 Hau Chen