setTimeout代替setInterval避免阻塞

 

使用setTimeout代替setInterval避免setInterval阻塞

 

/**
 * setTimeout替代setInterval,避免阻塞
 * @export
 * @class InsteadSetInterval
 */
export class InsteadSetInterval {
  constructor(fn, timeout, immediately) {
    this.timer = null
    this.fn = fn
    this.immediately = immediately
    this.timeout = timeout
    this.isOff = false
    this.start()
  }
  doIt () {
    this.isOff = false
    return setTimeout(() => {
      this.fn()
      if (this.isOff) return
      this.timer = this.doIt(this.fn, this.timeout)
    }, this.timeout)
  }
  stop () {
    window.clearTimeout(this.timer)
    this.isOff = false
  }
  start () {
    this.timer && clearTimeout(this.timer)
    this.immediately && this.fn()
    this.timer = this.doIt()
  }
}

 

posted @ 2022-08-19 14:51  丿流水  阅读(192)  评论(0)    收藏  举报