vue中定时器setInterval的使用及说明

 更新时间:2023年03月02日 15:02:22   作者:奥特蛋_mm  
这篇文章主要介绍了vue中定时器setInterval的使用及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

深坑

自己在项目中使用setInterval,由于不正确的使用,竟然导致了浏览器崩溃,项目停止,电脑死机…可怕之极,下面详细写一下关于定时器的用法及注意事项

声明

    mouted() {
    	this.timer = setInterval(()=>{
    	// 要执行的函数
    	})
    }

销毁

destoryed() {
	this.clearInterval(this.timer)
}

看起来是很简单也没有什么,但是坑来了,实际项目中使用

在这里插入图片描述

    addSetInterval() {
      const that = this
      this.positionTimer = setInterval(() => {
        if (that.resultArr.length < that.times) {
          clearInterval(that.positionTimer)
          that.positionTimer = null
          console.log(that.times)
        } else {
          // 分批部署基站
          if (that.times < that.resultArr.length) {
            that.deployBaseStation()
            console.log('渲染数组的第' + that.times + '项')
          }
          that.times++
        }
        console.log(1111111111111)
      }, 500)
    },

由于这里定义了定时器,箭头函数内部和外部的作用域不同了,要定义一个变量来使函数内部使用vue数据的时候指向不出错,

that 是指vue , this是指定时器 positionTimer

之前为了确认定时器已经停止了,在destory中和定时器中都输出了定时器的值,即 console.log(this.positionTimer),然而,上图

在这里插入图片描述

离开当前路由,再回到当前路由,之后控制台打印

在这里插入图片描述

然后不久之后就是

在这里插入图片描述

WTF???

在请教了同学之后,她说可能跟我打印定时器也有关系,输出的时候调用了定时器,导致定时器关闭失败,我也是真的无奈了,一开始也没有定义额外的变量来确定this的指向,具体原因不明,总之,在不输出定时器,改加了额外的变量之后,定时器停止了

最终代码如下:

  destroyed() {
    clearInterval(this.positionTimer)// 清除定时器
    this.positionTimer = null
    // 离开路由之后断开websocket连接
    this.webSocketOnClose()
    this.websocketclose()
  },
  methods: {
    // 添加定时器
    addSetInterval() {
      const that = this  // 声明一个变量指向vue实例this,保证作用域一致
      this.positionTimer = setInterval(() => {
        if (that.resultArr.length < that.times) {
          clearInterval(that.positionTimer)
          that.positionTimer = null
          console.log(that.times)
        } else {
          // 分批部署基站
          if (that.times < that.resultArr.length) {
            that.deployBaseStation()
            console.log('渲染数组的第' + that.times + '项')
          }
          that.times++
        }
        console.log(1111111111111)
      }, 500)
    },

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • element-ui动态添加表单项并实现事件触发验证代码示例

    element-ui动态添加表单项并实现事件触发验证代码示例

    这篇文章主要给大家介绍了关于element-ui动态添加表单项并实现事件触发验证的相关资料,其实就是利用了vue的v-for循环渲染,通过添加数组实现动态添加表单项,需要的朋友可以参考下
    2023-12-12
  • Vue中axios拦截器如何单独配置token

    Vue中axios拦截器如何单独配置token

    这篇文章主要介绍了Vue axios拦截器如何单独配置token及vue axios拦截器的使用,需要的朋友可以参考下
    2019-12-12
  • vue父子组件slot插槽的使用

    vue父子组件slot插槽的使用

    这篇文章主要介绍了vue父子组件slot插槽的使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • vue中使用gojs/jointjs的示例代码

    vue中使用gojs/jointjs的示例代码

    这篇文章主要介绍了vue中使用gojs/jointjs的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • 详解Vue的监听属性

    详解Vue的监听属性

    这篇文章主要为大家介绍了Vue的监听属性,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-11-11
  • 使用vue实现pdf预览功能的方法

    使用vue实现pdf预览功能的方法

    许多朋友想要材料上传之后点击预览实现在浏览器上预览的效果,所以本文将给大家介绍如何使用vue实现pdf预览功能,文中有实现代码,有需要的朋友可以参考阅读下
    2023-08-08
  • vue el-date-picker 日期回显后无法改变问题解决

    vue el-date-picker 日期回显后无法改变问题解决

    这篇文章主要介绍了vue el-date-picker 日期回显后无法改变问题解决,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04
  • vue嵌入第三方页面几种常见方法

    vue嵌入第三方页面几种常见方法

    在Vue中嵌入第三方页面可以采用多种方法,例如使用<iframe>、Vue插件、动态加载第三方脚本或WebComponents,不同方法适用于不同类型的内容和项目需求,如<iframe>适用于整个网页,而动态脚本和WebComponents适合特定功能,选择合适的方法可以有效整合外部资源
    2024-09-09
  • vue路径写法之关于./和@/的区别

    vue路径写法之关于./和@/的区别

    这篇文章主要介绍了vue路径写法之关于./和@/的区别,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • vue2.0 循环遍历加载不同图片的方法

    vue2.0 循环遍历加载不同图片的方法

    下面小编就为大家分享一篇vue2.0 循环遍历加载不同图片的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03

最新评论