定时器开启之后,触发关闭后定时器的内容还会持续执行多次是什么原因?

2023-06-16 356 0

if (!isConfirmOnline) {
  this.timer = setInterval(checkOfflineStatus.bind(this), OFFLINE_STATUS_INTERVAL);
}
function checkOfflineStatus () {
  console.log('开启了定时器--');
  IpuMobile.offlineStatus([], res => {
    let isConfirmOnline1 = this.getOnlineResult(res);
    console.log('定时器获取在线结果', isConfirmOnline1);
    this.$store.commit('common/setIsOffline', !isConfirmOnline1);
    if (isConfirmOnline1) {
      clearInterval(this.timer);
      this.timer = null
      console.log('关闭了定时器--');
      // 提交数据
      submitCacheContent();
    }
  });
}

引用日志发现 定时器获取在线结果--true 以及 关闭了定时器--都执行了很多次,正常期望 同时执行一次

shodata:true
function checkOfflineStatus () {

    if(!this.shodata) return
    this.shodata=false
    console.log('开启了定时器--');
    IpuMobile.offlineStatus([], res => {
      let isConfirmOnline1 = this.getOnlineResult(res);
      console.log('定时器获取在线结果', isConfirmOnline1);
      this.$store.commit('common/setIsOffline', !isConfirmOnline1);
      if (isConfirmOnline1) {
        clearInterval(this.timer);
        this.timer = null
        console.log('关闭了定时器--');
        // 提交数据
        submitCacheContent();
      }
    });
    setTimeout(() => {
        this.shodata=true
  }, 1000);
  }

这样你试试还会触发不 你是不是做了双重监造成的

function checkOfflineStatus () {
    console.log('开启了定时器--');
    if (!this.$store.state.common.isConfirmOnline1) {
      clearInterval(this.timer);
      this.timer = null
      console.log('关闭了定时器--');
      return 
    }
    IpuMobile.offlineStatus([], res => {
      const isConfirmOnline1 = this.getOnlineResult(res);
      console.log('定时器获取在线结果', isConfirmOnline1);
      this.$store.commit('common/setIsOffline', !isConfirmOnline1);
      submitCacheContent();
    });
  }

回答

相关文章

nuxt2部署静态化和ssr的时候访问首页先报404再出现首页为什么?
`clip-path` 如何绘制圆角平行四边形呢?
多线程wait方法报错?
VUE 绑定的方法如何直接使用外部函数?
vue2固定定位该怎么做?
谁有redis实现信号量的代码,希望借鉴一下?