解决chrome中使用setInterval引起的资源加载失败报错

记录一次解决chrome中使用setInterval引起的资源加载失败报错

这里有三种情况,都是和Ajax请求有关。
第一,如果是使用一个setInterval,如果设置的间隔时间小于了执行请求时间,会因为上个请求数据没有返回而执行下个请求造成阻塞,就会报类似于 net :: ERR_NETWORK_IO_SUSPENDED;

第二,如果是使用多个setInterval,就算设置时间比较长,但是由于两个setInterval执行时间相隔太短也会出现这个报错,我就是这种情况,而且都只要点击一下浏览器报错信息重新加载就好了,但是用户不会这样操作,所以还是不好,而且这两种情况都可能是由于网页长时间没有操作的前提下,只要有操作,好像都不会报错。

第三就是单纯的由于用户没有长时间操作而引起的。

综上可以间隔一定时间,比如15分钟,让浏览器自动执行一次鼠标操作,比如移动,点击等,但是又要注意这些操作不会引发自己设置的相应事件引发其他bug.

我解决的办法想到了几种,比如我的项目有自动刷新数据功能,那就间隔一定时间模拟鼠标点击该按钮效果,反正都要自动获取,具体代码百度一下就好了,但是我没试过。因为我还有用户能关闭这个功能。所以我先采用自动刷新页面

this.autoreloadInter = setInterval(() => {
      
      this.reload()
    },60000)

如果写在mounted里面并不会像我想的那样每次刷新,定时器会重载,这个定时器会累加,但是只是个数变多,不会影响执行时间,但是定时器多了你懂的

但是可能会出现白屏,所以采用新建一个空白页,先跳转到空白页,我的只是页面会闪一下,但是没有白屏,所以没用这个方法

this.$router.replace({
path:'空白页.vue',
name:'空白页'
}

空白页写:

this.$router.replace({
path:'index.vue',
name:'index'
}

最后一种方法,亲测居然和我写location.reload()效果一样,我还是写出来好了,先在app定义好

<template>
  <div id="app">
    
    <router-view v-if="isRouterAlive" />
  </div>
</template>
<script>
export default {
  provide() {
    return {
      reload: this.reload
    };
  },
  data() {
    return {
      isRouterAlive: true 
    };
  },
  methods: {
    reload() {
      this.isRouterAlive = false;
      this.$nextTick(function() {
        this.isRouterAlive = true;
      });
    }
  }
};

然后在主页注册,比如home

inject:['reload'], 

就可以使用this.reload()刷新了

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值