前端定时任务

59 阅读1分钟
  this.flag = true
  this.setTime = (time, callback) => {
    this.clearTime = setInterval(() => {
      if (this.flag) {
        if (callback)callback()
      }
    }, time * 1000)
  }

第一种可以实现基本的定时任务,但是setInterval控制任务如网络请求,如果请求回来要花21秒,但是定时任务是20秒执行一次,第21秒开始执行下一次任务,不会等上一次的请求任务

this.setTime2 = (time, callback) => {
    this.clearTime = setTimeout(() => {
      if (this.flag) {
        if (callback)callback()
      }
    }, time * 1000)
  }

第二种用setTimeout模拟定时任务,不管上一次任务实际执行时间有没有超过定时器设置的时间,都可以等上一次任务执行完,在执行下一次定时任务,是可控的,所以建议用setTimeout