当前位置: 首页 > news >正文

【js】JavaScript清除所有(多个)定时器的方法:

文章目录

        • 一、停止单个定时器
        • 二、暂停与恢复定时器
        • 三、使用Promise来管理定时器
        • 四、使用ES6特性管理定时器
        • 五、案例(定时获取页面列表数据)


一、停止单个定时器
#在某些情况下,我们可能只需要停止单个定时器。
#在JavaScript中,我们可以使用clearTimeout()函数停止一个setTimeout()的定时器
#或者clearInterval()函数停止一个setInterval()的定时器。例如:// 创建一个定时器
var timer1 = setTimeout(function() {console.log("Hello world!");
}, 1000);// 停止定时器
clearTimeout(timer1);#当执行clearTimeout(timer1)时,之前创建的定时器就会被停止。
#对于setInterval()的定时器,使用clearInterval()的方法也是类似的。
#需要注意的是,clearTimeout()和clearInterval()函数都需要传入定时器的ID作为参数。
二、暂停与恢复定时器
#除了停止某个特定的定时器之外,有时候我们也需要暂停或者恢复所有的定时器。
#我们可以使用更高级的技术,比如使用闭包或者对象来控制所有的定时器。例如:// 创建一个对象来管理所有的定时器
var timerManager = {timers: [],addTimer: function(timer) {this.timers.push(timer);},pauseTimers: function() {for (var i = 0; i < this.timers.length; i++) {clearTimeout(this.timers[i]);}},resumeTimers: function() {for (var i = 0; i < this.timers.length; i++) {this.timers[i] = setTimeout(this.timers[i].callback, this.timers[i].interval);}}
};// 创建多个定时器
var timer1 = {interval: 1000, callback: function() {console.log("Hello world!");
}};
var timer2 = {interval: 2000, callback: function() {console.log("Goodbye world!");
}};// 添加定时器到管理器
timerManager.addTimer(timer1);
timerManager.addTimer(timer2);// 暂停定时器
timerManager.pauseTimers();// 恢复定时器
timerManager.resumeTimers();#在此示例中,我们使用一个名为timerManager的对象来管理所有的定时器。
#addTimer()方法用于向管理器添加定时器,pauseTimers()方法用于暂停所有的定时器,resumeTimers()方法用于恢复所有的定时器。
#需要注意的是,pauseTimers()方法和resumeTimers()方法都需要遍历定时器数组,然后使用clearTimeout()函数来清除之前创建的定时器。
三、使用Promise来管理定时器
#使用Promise来管理定时器是一种非常高效的方式。
#我们可以通过创建一个Promise来实现定时器并且使用resolve()和reject()方法来控制定时器的行为。例如:// 创建一个函数来包装setTimeout
function wait(time) {return new Promise(function(resolve, reject) {setTimeout(resolve, time);});
}// 使用Promise管理定时器
Promise.all([wait(1000), wait(2000)]).then(function() {console.log("Both timers complete!");
});#在此示例中,我们创建一个名为wait的函数,该函数返回一个Promise。
#在这个Promise中,我们使用setTimeout函数来实现一个定时器,并且使用resolve()方法来告诉Promise,当定时器触发时执行resolve()回调函数。
#最后,我们使用Promise.all()方法来等待所有的定时器完成,并且在完成时触发回调函数。这种方式相比于使用定时器数组进行管理,更加简洁和高效。
四、使用ES6特性管理定时器
#在ES6及以上版本的JavaScript中,我们可以使用更加现代的方式来管理定时器。例如,使用Set和箭头函数。// 创建Set来管理定时器
const timers = new Set();// 创建多个定时器
const timer1 = setTimeout(() => {console.log("Hello world!");
}, 1000);
const timer2 = setTimeout(() => {console.log("Goodbye world!");
}, 2000);// 将定时器添加到Set
timers.add(timer1);
timers.add(timer2);// 暂停所有的定时器
for (const timer of timers) {clearTimeout(timer);
}
五、案例(定时获取页面列表数据)
  1. 定时器会生成多个,即有多个定时器id,需要清除不需要的的定时器
  2. 菜单没有选中当前页面,定时器也不需要
<script>
// 创建Set来管理定时器
const timers = new Set();export default {data() {return {}},created() {this.loadData()},watch: {'$route': function (val) {if (!val.path.includes("当前页面的path")) {// 暂停所有的定时器for (const timer of timers) { clearTimeout(timer); };}else{this.loadData()}}},beforeDestroy() {// 暂停所有的定时器for (const timer of timers) { clearTimeout(timer); }},methods: {// 获取页面数据loadData() {// 暂停所有的定时器for (const timer of timers) { clearTimeout(timer); }let param = { ...xxx }...API(param).then(res => {....}).finally(() => {let timer = setTimeout(() => { this.init() }, 10000);// 将定时器添加到Settimers.add(timer);})},
}
</script>

相关文章:

【js】JavaScript清除所有(多个)定时器的方法:

文章目录 一、停止单个定时器二、暂停与恢复定时器三、使用Promise来管理定时器四、使用ES6特性管理定时器五、案例&#xff08;定时获取页面列表数据&#xff09; 一、停止单个定时器 #在某些情况下&#xff0c;我们可能只需要停止单个定时器。 #在JavaScript中&#xff0c;我…...

java实现周易64卦并返回对应的卦象(含百度百科链接)

《易经》是中华民族传统思想文化中自然哲学与人文实践的理论根源&#xff0c;是古代汉民族思想、智慧的结晶&#xff0c;被誉为“大道之源”&#xff0c;是古代帝王之学&#xff0c;政治家、军事家、商家的必修之术。 《易经》含盖万有&#xff0c;纲纪群伦&#xff0c;是中华…...

# 算法与程序的灵魂

文章目录 前言算法与程序的关系例子1&#xff1a;冒泡排序例子2&#xff1a;斐波那契数列算法优化与进阶总结 前言 大家好我是艾老虎尤&#xff0c;算法与程序是计算机科学中两个非常重要的概念。算法是解决问题的方法和步骤&#xff0c;而程序是算法的具体实现。在计算机科学…...

2023-10-21 美团2024秋招后端开发岗笔试题

1 考察dfs和拓扑排序 1.1 题目描述&#xff08;如果拓扑排序不清楚可以去做一下lc 207. 课程表&#xff09; 1.2 答案 import java.util.*;public class Meituan {static int m,n;public static void main(String[] args) {Scanner in new Scanner(System.in);m in.nextInt…...

汽车托运是怎样收费

汽车托运是如何收费的呢?一般来说&#xff0c;汽车托运的费用是会随着每公里来增加&#xff0c;目前的托运的每公里费用在1.2-1.8元之间&#xff0c;托运的距离越远那么它的托运单价费用就会越低&#xff0c;如果你运气好找到一家在搞活动的汽车托运公司&#xff0c;那么你就算…...

使用docker-compose私有化部署 GitLab

在软件开发和协作过程中&#xff0c;版本控制是至关重要的一环。GitLab 是一个功能强大的开源平台&#xff0c;提供了完整的代码管理功能&#xff0c;包括版本控制、问题跟踪以及持续集成等。这使得团队能够更高效地协作开发。前段时间翻阅笔记时&#xff0c;偶然发现了之前公司…...

Vue项目引入百度统计的正确操作步骤,亲测有效!

1、平台获取统计代码 2、在head和body中分别添加以下代码 head: <script>var _hmt _hmt || [];</script>body: <script>var _hmt _hmt || [];(function () {var hm document.createElement("script");hm.src "https://hm.baidu.com/hm.js…...

Keras中model.evaluate() 返回的是 loss value 和 metrics values

Keras官方文档&#xff1a; https://keras.io/models/model/#evaluate Keras中model.evaluate() 返回的是 损失值和训练时选定的指标值&#xff08;例如&#xff0c;[AUC, , accuracy]&#xff09;。 训练时选定的指标值是指model.compile()里面metrics后面的值&#xff0c;ev…...

CSRF跨域请求伪造

1.SSRF服务端请求伪造&#xff08;外网访问内网&#xff09; SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下&#xff0c;SSRF是要目标网站的内部系统。&#xff08;因为他是从内部系统访问的&#xf…...

LeetCode 1465. 切割后面积最大的蛋糕:纵横分别处理

【LetMeFly】1465.切割后面积最大的蛋糕&#xff1a;纵横分别处理 力扣题目链接&#xff1a;https://leetcode.cn/problems/maximum-area-of-a-piece-of-cake-after-horizontal-and-vertical-cuts/ 矩形蛋糕的高度为 h 且宽度为 w&#xff0c;给你两个整数数组 horizontalCut…...

YTM32的增强型定时器eTMR外设模块详解

文章目录 eTMR外设简介eTMR工作机制系统框图引脚与信号计数器与时钟源输出比较模式PWM模式通道配对通道对的互补输出&#xff08;Complementary Mode&#xff09;双缓冲输出PWM&#xff08;Double Switch&#xff09;错误检测机制&#xff08;Fault Detection&#xff09; 输入…...

40.查找练习题(王道2023数据结构第7章)

试题1&#xff08;王道7.2.4节综合练习5&#xff09;&#xff1a; 写出折半查找的递归算法。 #include<stdio.h> #include<stdlib.h> #include<string.h>#define MAXSIZE 10 #define ElemType int #define Status inttypedef struct{int data[MAXSIZE]; /…...

Segmentation fault 的bug解决

一&#xff0c;Segmentation fault 的bug解决 问题描述&#xff1a;自己在使用CPU上调试完代码之后&#xff0c;可以稳定运行&#xff0c;有输出结果。 但是把数据和模型加载上GPU之后&#xff0c;出现了报错。 Segmentation fault (core dumped) 搜了一下可能存在的原因&…...

【Python机器学习】零基础掌握BaggingRegressor集成学习

如何提升回归模型的稳定性和准确性? 在实际生活中,比如房价预测,经常会遇到一种情况:有大量的特征和样本数据,但模型的预测准确度仍然不尽人意。这时候,单一的模型(如支持向量机回归)可能表现得并不够好。 考虑到这个问题,解决方案可能是使用集成方法,特别是Baggin…...

麒麟KYLINOS通过命令行配置kysec的防火墙

原文链接&#xff1a;麒麟KYLINOS通过命令行配置kysec的防火墙 hello&#xff0c;大家好啊&#xff0c;今天给大家带来一篇使用命令行配置kysec的防火墙的文章&#xff0c;通过本篇文章的学习&#xff0c;大家可以了解到图形化界面中的防火墙信息是如何生成的&#xff0c;为后期…...

磁盘监控:告警时发送邮件

1.配置邮箱 1.编辑邮箱配置文件 vim /etc/mail.rc2.在末尾输入自己的邮箱配置&#xff0c;以163邮箱为例 #开启ssl set ssl-verifyignore #证书目录&#xff0c;下方为centos系统证书默认位置&#xff0c;也自行生成证书并指定 set nss-config-dir/etc/pki/nssdb # 配置的第…...

【HarmonyOS】元服务卡片router实现跳转到指定页面并传动态参数

【关键字】 元服务卡片、router跳转不同页面、传递动态参数 【写在前面】 本篇文章主要介绍开发元服务卡片时&#xff0c;如何实现从卡片中点击事件跳转到指定的应用内页面&#xff0c;并传递参数接受参数功能。此处以JS UI开发服务卡片为例&#xff0c;JS卡片支持组件设置ac…...

Centos安装RabbitMQ,JavaSpring发送RabbitMQ延迟延时消息,JavaSpring消费RabbitMQ消息

1&#xff0c;版本说明 erlang 和 rabbitmq 版本说明 https://www.rabbitmq.com/which-erlang.html 确认需要安装的mq版本以及对应的erlang版本。 2&#xff0c;下载安装文件 RabbitMQ下载地址&#xff1a; https://packagecloud.io/rabbitmq/rabbitmq-server Erlang下载地…...

leetcode:1323. 6 和 9 组成的最大数字(python3解法)

难度&#xff1a;简单 给你一个仅由数字 6 和 9 组成的正整数 num。 你最多只能翻转一位数字&#xff0c;将 6 变成 9&#xff0c;或者把 9 变成 6 。 请返回你可以得到的最大数字。 示例 1&#xff1a; 输入&#xff1a;num 9669 输出&#xff1a;9969 解释&#xff1a; 改变…...

SpringBoot集成Redis Cluster集群(附带Linux部署Redis Cluster高可用集群)

目录 一、前言二、集成配置2.1、POM2.2、添加配置文件application.yml2.3、编写配置文件2.4、编写启动类2.5、编写测试类测试是否连接成功 一、前言 这里会使用到spring-boot-starter-data-redis包&#xff0c;spring boot 2的spring-boot-starter-data-redis中&#xff0c;默…...

LLaMA3核心技术深度拆解:从架构革新到高效训练的实战密码

1. LLaMA3的架构革新&#xff1a;为什么这些设计能改变游戏规则 当Meta发布LLaMA3时&#xff0c;最让我惊讶的不是参数规模&#xff0c;而是那些看似微小的架构调整带来的巨大性能提升。作为经历过BERT到GPT-3时代的老兵&#xff0c;我见证过太多"暴力堆参数"的失败案…...

手把手教你用FBRT-YOLO在VisDrone数据集上跑出SOTA:从环境配置到模型推理的保姆级教程

手把手教你用FBRT-YOLO在VisDrone数据集上跑出SOTA&#xff1a;从环境配置到模型推理的保姆级教程 航拍图像目标检测一直是计算机视觉领域的难点&#xff0c;尤其是小目标检测问题。无人机拍摄的图像分辨率高、目标密集且尺寸小&#xff0c;传统检测算法往往难以兼顾精度和速度…...

GKD规则冲突检测:自动化识别并提示重叠规则问题

GKD规则冲突检测&#xff1a;自动化识别并提示重叠规则问题 在GKD自动化工具的使用过程中&#xff0c;规则冲突检测是一个至关重要的功能。当多个订阅规则同时作用于同一个应用时&#xff0c;可能会出现规则重叠或相互干扰的情况。GKD的智能冲突检测机制能够自动识别这些问题&…...

Blender插件使用指南:GI-Model-Importer建模工具详解

Blender插件使用指南&#xff1a;GI-Model-Importer建模工具详解 【免费下载链接】GI-Model-Importer Tools and instructions for importing custom models into a certain anime game 项目地址: https://gitcode.com/gh_mirrors/gi/GI-Model-Importer 欢迎来到GI-Mode…...

Go语言中的正则表达式

Go语言中的正则表达式 1. 正则表达式的基本概念 正则表达式是一种用于匹配字符串中字符组合的模式。在Go语言中&#xff0c;正则表达式通过regexp包来实现。 2. 基本用法 2.1 编译正则表达式 package mainimport ("fmt""regexp" )func main() {// 编译正则…...

告别写死地址!CH32V IAP升级实战:用函数传参实现APP跳转地址的动态配置

CH32V IAP升级进阶&#xff1a;动态跳转地址的工程实践与安全设计 在嵌入式开发中&#xff0c;IAP&#xff08;In-Application Programming&#xff09;技术是实现固件远程更新的重要手段。对于CH32V系列RISC-V MCU而言&#xff0c;官方示例中"写死"跳转地址的做法虽…...

瑞芯微RK3588/RK356X混合量化实战:手把手教你用rknn-toolkit2优化模型精度

瑞芯微RK3588/RK356X混合量化实战&#xff1a;手把手教你用rknn-toolkit2优化模型精度 在嵌入式AI开发中&#xff0c;模型量化是提升推理效率的关键技术&#xff0c;但传统的全INT8量化往往会导致精度损失&#xff0c;影响最终应用效果。瑞芯微的rknn-toolkit2工具链提供了混合…...

如何快速掌握notepad--:国产跨平台文本编辑器的完整指南

如何快速掌握notepad--&#xff1a;国产跨平台文本编辑器的完整指南 【免费下载链接】notepad-- 一个支持windows/linux/mac的文本编辑器&#xff0c;目标是做中国人自己的编辑器&#xff0c;来自中国。 项目地址: https://gitcode.com/GitHub_Trending/no/notepad-- 引…...

高并发场景下的B2B对公支付方案:聚合支付、错付拦截与自动化对账

在B2B交易场景中&#xff0c;大额对公支付一直是一个绕不开的技术难题。与C端支付不同&#xff0c;B2B交易涉及百万级甚至千万级资金流转&#xff0c;传统的线下转账模式不仅流程繁琐&#xff0c;还带来了财务对账耗时、错付退款难、客户付款流失率高等一系列问题。本文将从技术…...

如何让任何老旧手柄在PC游戏中完美工作:3步终极解决方案

如何让任何老旧手柄在PC游戏中完美工作&#xff1a;3步终极解决方案 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 还在为心爱的游戏手柄无法在PC上使用而烦…...