VUE中setTimeout和setInterval自动销毁案例


Posted in Javascript onSeptember 07, 2020

在Vue的大型单页应用中,在某个路由下,经常会出现需要延迟执行(setTimeout)或者间隔之心(setInterval)的函数,但是每次在页面destroy之前,都必须手动清理掉。

正常代码如下:

beforeDestroy() {
  this._timer && clearTimeout(this._timer);
}

但是如果一不小心,就会忘记,会造成意想不到的情况,那么有什么办法能避免这种情况吗?

当然有,那就是重新写一个setTimeout的方法(或者干脆劫持window.setTimeout)。

var _pageTimer = []; 
Vue.prototype.setTimeout = (fn, time) => {
  let handler = window.setTimeout(fn, time);
  _pageTimer.push(handler);
  
  return handler;
}

在路由层面,当每次页面变更时,执行清理工作:

router.beforeEach((to, from, next) => { _pageTimer.map(handler => { window.clearTimeout(handler); }) })

再页面使用时,调用Vue的setTimeout,这样是不是方便多了呢? setInterval也是一样的。

该方法还适用于对于页面异步请求的ajax处理,可以通过获取ajax的handler,在切面切换时,调用handler.abort() 取消请求,避免对服务器资源的不必要的压力。

补充知识:在vue中使用 setTimeout ,退出页面后,计时器没有销毁

问题:页面在使用 setTimeout 定时循环某方法,或者在两个页面之间跳转时间小于定时器的时间间隔时,定时器还在运行。

原因:当我们刷新页面时,会将当前页面之前创建的 setTimeout 以及其他定时器都清除掉,但是仅仅是路由切换是不会清除的。

data (){
 return{
 clearTime: ''
 }
},
mounted () {
 randomGet () {
 // 在 1分钟到 2分钟之间 不定时执行
   var r = Math.random() * (2 - 1) + 1
   var t = Math.ceil(r * 60000)
   // console.log(t)
   this.clearTime = setTimeout(() => {
    this.submit()
    this.randomGet()
   }, t)
  },
  submit () {
   console.log('aaaa')
  }
},
destroyed () {
 clearTimeout(this.clearTime) // 清除
}

以上这篇VUE中setTimeout和setInterval自动销毁案例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
DOM相关内容速查手册
Feb 07 Javascript
setAttribute 与 class冲突解决
Feb 17 Javascript
js no-repeat写法 背景不重复
Mar 18 Javascript
js 通用订单代码
Dec 23 Javascript
js中的for如何实现foreach中的遍历
May 31 Javascript
javascript匿名函数实例分析
Nov 18 Javascript
JavaScript中的null和undefined区别介绍
Jan 01 Javascript
在其他地方你学不到的jQuery小贴士和技巧(欢迎收藏)
Jan 20 Javascript
原生js实现自由拖拽弹窗代码demo
Jun 29 Javascript
jQuery表单验证插件解析(推荐)
Jul 21 Javascript
超实用的javascript时间处理总结
Aug 16 Javascript
在vue项目中安装使用Mint-UI的方法
Dec 27 Javascript
vue a标签点击实现赋值方式
Sep 07 #Javascript
JavaScript实现多球运动效果
Sep 07 #Javascript
JavaScript实现世界各地时间显示
Sep 07 #Javascript
VUE UPLOAD 通过ACTION返回上传结果操作
Sep 07 #Javascript
vue中element 的upload组件发送请求给后端操作
Sep 07 #Javascript
vue-simple-uploader上传成功之后的response获取代码
Sep 07 #Javascript
Vue.js暴露方法给WebView的使用操作
Sep 07 #Javascript
You might like
ThinkPHP快速入门实例教程之数据分页
2014/07/01 PHP
PHP常用函数之格式化时间操作示例
2019/10/21 PHP
把html页面的部分内容保存成新的html文件的jquery代码
2009/11/12 Javascript
node.js中的fs.open方法使用说明
2014/12/17 Javascript
快速掌握Node.js环境的安装与运行方法
2016/02/16 Javascript
Bootstrap前端开发案例二
2016/06/17 Javascript
关于javascript中限定时间内防止按钮重复点击的思路详解
2016/08/16 Javascript
JS给swf传参数的实现方法
2016/09/13 Javascript
使用jQuery实现动态添加小广告
2017/07/11 jQuery
webpack引入eslint配置详解
2018/01/22 Javascript
JavaScript实现百度搜索框效果
2020/03/26 Javascript
vue项目部署上线遇到的问题及解决方法
2018/06/10 Javascript
vue全局使用axios的方法实例详解
2018/11/22 Javascript
javascript验证form表单数据的案例详解
2019/03/25 Javascript
解决Layui中layer报错的问题
2019/09/03 Javascript
Vuejs通过拖动改变元素宽度实现自适应
2020/09/02 Javascript
[01:13:17]Secret vs NB 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
详细介绍Ruby中的正则表达式
2015/04/10 Python
python用pickle模块实现“增删改查”的简易功能
2017/06/07 Python
python删除列表元素的三种方法(remove,pop,del)
2019/07/22 Python
Python实现手绘图效果实例分享
2020/07/22 Python
Python如何绘制日历图和热力图
2020/08/07 Python
给定一个时间点,希望得到其他时间点
2013/11/07 面试题
思想品德自我鉴定
2013/10/12 职场文书
计算机操作自荐信
2013/12/07 职场文书
生物技术专业毕业生求职信范文
2013/12/14 职场文书
毕业生自荐书
2014/02/02 职场文书
创业资金计划书
2014/02/06 职场文书
爱耳日宣传活动总结
2014/07/05 职场文书
党员学习中共十八大思想报告
2014/09/12 职场文书
浪漫婚礼主题活动策划方案
2014/09/15 职场文书
房屋转让协议书
2014/10/18 职场文书
2014流动人口计划生育工作总结
2014/12/20 职场文书
年会邀请函范文
2015/01/30 职场文书
如何在CocosCreator里画个炫酷的雷达图
2021/04/16 Javascript
JavaScript原型链详解
2021/11/07 Javascript