// 稳定时间之后 如果没有更新新值,就do something
function settingTimeFunc (settingTime, cb) {
let settingData = null
return function (data) {
settingData = data
setTimeout(() => {
if (settingData === data) cb(settingData)
}, settingTime)
}
}
// 如果200ms值没变,就认为值已经稳定下来了,执行回调
let t = settingTimeFunc(200, (data) => { console.log('setting data:', data) })
t(-1)
t(0)// 马上写入-1,0
setTimeout(() => { t(1) }, 100)// 100ms后写入1,
setTimeout(() => { t(2) }, 200)// 200ms后写入2,
// 300ms
// 400ms后,在200ms写入的2,已经超过了200ms的稳定时间,执行回调do something
setTimeout(() => { t(5) }, 500)// 500ms后写入5
// 600ms
// 700ms后,在500ms写入的5,已经超过了200ms的稳定时间,执行回调do something
setTimeout(() => { t(8) }, 800)// 800ms后写入8
// 900ms
// 1s后,在800ms写入的8,已经超过了200ms的稳定时间,执行回调do something
执行结果:
setting data: 2
setting data: 5
setting data: 8