iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >如何解决vue项目开发中setTimeout等定时器的管理问题
  • 307
分享到

如何解决vue项目开发中setTimeout等定时器的管理问题

2024-04-02 19:04:59 307人浏览 安东尼
摘要

小编给大家分享一下如何解决Vue项目开发中setTimeout等定时器的管理问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、问题来源。在项目中,我们经常有这样的需求,一个页面初始化后

小编给大家分享一下如何解决Vue项目开发中setTimeout等定时器的管理问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

一、问题来源。

在项目中,我们经常有这样的需求,一个页面初始化后,需要不断的去请求后端,来获取当前某个记录的最新状态。

显然,这个可以用setTimeout以及回调中继续setTimeout来实现。

我们假设定时器是在页面#/test/aaa上创建的。

但是,会遇到以下两个问题,我从#/test/aaa   这个页面切换到  #/test/bbb页面后如果停留在#/test/bbb,定时器还在跑。

其次,如果我不断在#/test/aaa 和 #/test/bbb两个页面之间不断的切换,而且切换时间小于定时器的间隔时间时,也会出现

重复创建setTimeout的情况。

现在的问题就是,我们如何做到管理定时器。

二、示例代码。

created() {
  if ( this.timeOut ) {
    clearTimeout(this.timeOut);
  }
  this.getListIng();
},
computed: {
  timeOut: {
    set (val) {
      this.$store.state.timeout.compileTimeout = val;
    },
    get() {
      return this.$store.state.timeout.compileTimeout;
    }
  },
},
methods: {
  getListIng() {
    // 这里是一个Http的异步请求
    if ( getUrlModule() == 'aaa' ) {
      let _this = this;
      this.timeOut = setTimeout(() => {
        _this.getListIng();
      }, 5000);
    } else {
      this.timeOut = '';
    }
  },
}

(1)如上面代码所示,当创建页面(created执行)时,会先判断变量this.timeOut是否存在,如果存在,先clearTimeout掉。

(2)而,this.timeOut这个变量对应的是全局store里的this.$store.state.timeout.compileTimeout。并且是双向绑定的,这个

请自行搜索vue2.0中computed用法。

 (3)在我们的主函数getListIng()中,会先使用函数getUrlModule()根据url判断当前页面是否是aaa页面,如果是的,就执行setTimeOut,

如果不是,就不行执行了,并且设置this.timeOut = '';

我们假设上面没有if ( getUrlModule() == 'aaa' ) 这句判断,会出现,当我们已经跳出了当前aaa页面,去了bbb页面并且一直停留在bbb页面时,

还有setTimeout在执行,就会不断有http的请求。

如果没有if ( this.timeOut ) { clearTimeout(this.timeOut); } 这句代码。当我们不断在2个页面之间切换时,且切换的频率很高。会出现多次创建

setTimeout的情况。这个逻辑稍微有点绕,请阅读者自行演算。

三、我们必须清楚的事实。

(1)vue中$store里创建的变量,其实是全局变量,这个变量在切换页面时不会清除,当我们刷新页面时会清除掉。

(2)在前端页面中,当我们刷新页面时,会将当前页面之前创建的setTimeout以及其他定时器都清除掉。但是,切换页面(仅仅是路由切换)

是不会清除的。

(3)setTimeout、setinterval有本质的不同,前者只执行一次,除非你在回调中,不断的调用,而后者是不间断调用的。但是,我在各种实践中发现,

还是setTimeout好用。因为,setTimeout可以根据条件,及时在回调中停用。如果采用setinterval,我们很有可能捕捉不到停用的条件而无法停用。

补充:Vue之SetTimeout

1.前言

相信很多人都遇到过这样的问题,页面数据需要不断的刷新,也就是不断的发送ajax请求来更新数据,那么在vue中怎样做才比较好呢?这里介绍一下我踩的坑,以及解决方案

2.问题

settimeout用来调用请求数据,但是我遇到的问题就是,没有用合适的方式去关闭settimeout,出现了离开当前页面,请求还在不断的发送问题,这样给服务器带来了无必要的压力。附上之前的代码:

self.deployTimeOutId = setTimeout(() => {
              self.getDeployList(false);
            }, 5000);

说明:这一段代码是嵌在getDeployList方法中的,离开当前页面的是时候,必须要去手动的把这个settimeout清除才行。一般这个写在destoryed()这个钩子里。

window.clearTimeout(this.deployTimeOutId);

虽然这样处理了,但在逻辑比较复杂的情况下,还是出现了没有关闭的情况,而且排查起来很痛苦。下面介绍一种针对Vue比较好的做法。

3.解决方案

  let self=this;
  if (self && !self._isDestroyed) {
            setTimeout(() => {
              if (self && !self._isDestroyed)
                self.getDeployList();
            }, 5000);
          }

_isDestroyed这个属性表示的是当前这个组件是否有被销毁,true表示当前的组件已经被销毁,通过上面这个判断,我们就不需要自己手动的去用ID来清除了,这个就相当于递归嘛,有了一个结束判断,避免了死循环咯~~

看完了这篇文章,相信你对“如何解决vue项目开发中setTimeout等定时器的管理问题”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网JavaScript频道,感谢各位的阅读!

--结束END--

本文标题: 如何解决vue项目开发中setTimeout等定时器的管理问题

本文链接: https://www.lsjlt.com/news/73829.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何解决vue项目开发中setTimeout等定时器的管理问题
    小编给大家分享一下如何解决vue项目开发中setTimeout等定时器的管理问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、问题来源。在项目中,我们经常有这样的需求,一个页面初始化后...
    99+
    2024-04-02
  • Vue项目中使用setTimeout存在的潜在问题及解决
    目录使用setTimeout存在的潜在问题上代码总结使用setTimeout存在的潜在问题 在开发项目中遇到这样的序曲,点击按钮弹框,每次进入的时候都需要默认选中Android, 这...
    99+
    2023-01-28
    Vue使用setTimeout 使用setTimeout的潜在问题 Vue setTimeout
  • Vue开发项目中的兼容问题怎么解决
    今天小编给大家分享一下Vue开发项目中的兼容问题怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1. KingEdit...
    99+
    2023-07-04
  • 如何解决使用VueJS开发项目中的兼容问题
    这篇文章将为大家详细讲解有关如何解决使用VueJS开发项目中的兼容问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1. KingEditor,IE下提示‘对象不支持mo...
    99+
    2024-04-02
  • Vue项目中该如何解决跨域问题
    目录跨域同源策略express服务器vue处理跨域express处理跨域总结跨域 跨域报错是前端开发中非常经典的一个错误,报错如下  Access to XMLHttpRe...
    99+
    2024-04-02
  • 如何解决vue-cli项目开发运行时内存暴涨卡死电脑问题
    这篇文章给大家分享的是有关如何解决vue-cli项目开发运行时内存暴涨卡死电脑问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。最近开发一个vue项目时遇到电脑卡死问题,突然间系...
    99+
    2024-04-02
  • vue项目配置代理如何解决跨域问题
    目录Vue项目配置代理1. 这里以axios发请求为例2. 如果发送的请求都以 /abc 开头3. 代理多个接口什么是跨域?配置(vue.config.js)总结Vue项目配置代理 ...
    99+
    2023-01-28
    vue项目配置代理 vue跨域 vue配置代理
  • vue-cli npm如何解决vue项目中缺失core-js的问题
    目录vue-cli npm解决vue项目中缺失core-js报错原因解决办法vue踩坑:this dependency was not found问题背景vue-cli npm解决v...
    99+
    2022-11-13
    vue-cli npm vue项目中core-js vue缺失core-js
  • 如何解决PHP开发中的安全权限管理问题
    在PHP开发中,安全权限管理是一个至关重要的问题。当我们在开发网站或应用时,通过权限管理可以控制用户对不同功能或资源的访问权限,保护敏感数据和功能不受未经授权的用户访问。本文将介绍一些常见的安全权限管理问题,并提供具体的代码示例来解决这些问...
    99+
    2023-10-21
    PHP开发 解决问题 安全权限
  • Go语言中如何解决并发定时器问题?
    Go语言中的并发定时器问题是指在多个goroutine同时需要使用定时器时可能会出现的一些并发相关的问题。为了解决这些问题,Go语言提供了一些机制和技巧,本文将详细介绍这些解决方案,并给出代码示例。使用time.TickerGo语言的标准库...
    99+
    2023-10-22
    并发 关键词:Go语言 定时器问题
  • 如何解决Vue 2.0在IE11中打开项目页面空白的问题
    这篇文章主要介绍如何解决Vue 2.0在IE11中打开项目页面空白的问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!前言因为工作的需要,学习Vue2.0也有一段时间,最近在用Vue...
    99+
    2024-04-02
  • 如何解决将three项目迁移至vue项目遇到的问题
    这篇文章主要介绍了如何解决将three项目迁移至vue项目遇到的问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。通过npm下载的three依赖无法正常使用在原项目中使用的是...
    99+
    2023-06-28
  • vue-cli开发时如何解决关于ajax跨域的问题
    这篇文章主要介绍vue-cli开发时如何解决关于ajax跨域的问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!目的:使用vue-cli构建的项目,在开发时,想要访问后台接口获取数据...
    99+
    2024-04-02
  • Vue项目中input框focus时不调出键盘问题的解决
    目录input框focus时不调出键盘问题自动获取input焦点(内含ios不能唤起键盘解决方法)最开始的用法如果想要解决ios不生效办法input框focus时不调出键盘问题 在移...
    99+
    2024-04-02
  • vue项目中图片懒加载时出现的问题及解决
    目录vue图片懒加载的问题vue图片懒加载实现步骤vue图片懒加载踩过的坑今天踩过的坑总结vue图片懒加载的问题 项目中遇到一个问题,记录一下,vue项目中前期没有做图片懒加载的时候...
    99+
    2024-04-02
  • 如何使用kbone解决Vue项目同时支持小程序问题
    这篇文章主要为大家展示了“如何使用kbone解决Vue项目同时支持小程序问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用kbone解决Vue项目同时支...
    99+
    2024-04-02
  • 如何解决vue项目部署上线遇到的问题
    这篇文章将为大家详细讲解有关如何解决vue项目部署上线遇到的问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。流程     1.服...
    99+
    2024-04-02
  • 如何解决Vue+Element ui开发中碰到的IE问题
    这篇文章将为大家详细讲解有关如何解决Vue+Element ui开发中碰到的IE问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。IE9样式错乱,IE11无法正常加载v-...
    99+
    2024-04-02
  • Vue开发中出现Loading Chunk Failed的问题如何解决
    本文小编为大家详细介绍“Vue开发中出现Loading Chunk Failed的问题如何解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“Vue开发中出现Loading Chunk Failed的...
    99+
    2023-06-29
  • 如何解决vue-cli+webpack新建项目出错的问题
    小编给大家分享一下如何解决vue-cli+webpack新建项目出错的问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!使用 npm init webpack love 创建一个新项目,然...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作