JS中调用setInterval无效的情况怎样解决
Admin 2022-05-23 群英技术资讯 1426 次浏览
在这篇文章中,我们来学习一下“JS中调用setInterval无效的情况怎样解决”的相关知识,下文有详细的讲解,易于大家学习和理解,有需要的朋友可以借鉴参考,下面就请大家跟着小编的思路一起来学习一下吧。使用场景:我在函数A中调用定时器函数,定时器是单独写的一个函数
原因:页面加载时我调用了1次函数A,然后又单独调用了一次定时器函数,导致调用了2次setInterval(),导致有setInterval_id有2个值。
通过打印定时器的值发现的问题。
clearInterval()只关闭了其中一个setInterval_id,另一个setInterval_id还会启动setInterval()。
解决方法:把单独调用的定时器函数去掉。
补充知识:js vue中setTimeout无法通过clearTimeout清除问题
在异步清除中,利用vue 中data存放setTimeout的标识进行清除时,无法清除。则需要在函数前加上window.即可
如window.setTimeout与window.clearTimeout
具体代码如下
精简后的代码。
环境为electron-vue 渲染进程异步获取主进程上html并渲染到页面、过程中需要有loading的显示。
setTimeout 与clearTimeout 未加window时,this.timeOutLoading事件总会被触发。
<template>
<div id="dev">
<el-tabs v-model="activeName" @tab-click="handleClick" v-loading="loading">
<el-tab-pane label="文档" name="first">
<div v-html="html"></div>
</el-tab-pane>
<el-tab-pane label="设置" name="second">
<v-devCard></v-devCard>
</el-tab-pane>
</el-tabs>
</div>
</template>
<script>
const {ipcRenderer:ipc} = require('electron');
export default {
data(){
return{
activeName: 'second',
html:'',
loading:false,
timeOutLoading:0
}
},
methods:{
handleClick(tab, event) {
if(tab.name == 'first' && this.loading == false){
if(this.timeOutLoading != 0){
window.clearTimeout(this.timeOutLoading);
}
this.html = "<div style='text-align:center; height:200px; line-height:200px;'>加载中...</div>";
this.loading = true;
this.timeOutLoading = window.setTimeout(() => {
if(this.loading == true){
this.loading = false;
this.html = "<div style='text-align:center; height:200px; line-height:200px;'>加载超时</div>";
}
}, 3000);
window.setTimeout(() => {
ipc.send("getPage");
}, 500);
}
}
},
mounted(){
ipc.on('getPage-reply', (event, arg) => {
if(this.timeOutLoading != 0){
window.clearTimeout(this.timeOutLoading);
this.timeOutLoading = 0;
}
this.loading = false;
this.html = arg;
});
}
}
</script>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章给大家分享的是怎样用js实现生成验证码并校验的内容。小编觉得挺实用的,在很多注册登录页面都能使用到,因此分享给大家做个参考,感兴趣的朋友就继续往下看吧。
这篇文章主要介绍了vue+elementUI组件递归实现可折叠动态渲染多级侧边栏导航,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
这篇文章主要介绍了Js数组扁平化实现方法代码总汇,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
jquery隐藏dl元素的方法:1、利用“$(dl元素)”语句获取指定的dl元素对象;2、利用hide()方法将获取到的dl元素对象隐藏起来,语法为“dl元素对象.hide();”。
javascript中怎么将一维数组转为三维数组?本篇文章就来给大家分享一种转换方法,JS一维数组转化为三维数组有这个方法就够了!
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008