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

这篇具有很好参考价值的文章主要介绍了【js】JavaScript清除所有(多个)定时器的方法:。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


一、停止单个定时器
#在某些情况下,我们可能只需要停止单个定时器。
#在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);
        // 将定时器添加到Set
        timers.add(timer);
      })
    },
}
</script>

文章来源地址https://www.toymoban.com/news/detail-774960.html

到了这里,关于【js】JavaScript清除所有(多个)定时器的方法:的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • web前端【3】JS基础-轮播图【JavaScript、定时器、鼠标动作、自动轮播、增加和减少li列表】

    一、实验题目: 轮播图 二、实验内容简介 1.整体布局:图片、左右按钮、数字列表、添加删除按钮 2、左右箭头滚动 3、小圆点滚动 4、自动轮播 5、鼠标动作:指向和离开 6、添加与删除 三、实验过程 1. 需求分析 整体布局:设计一个轮播图,中间部分为自动轮播的图片展示

    2024年02月04日
    浏览(53)
  • STM32 hal库编程定时器清除中断标志位,开启定时器中断会立即进入中断的问题

    1、如果不清除中断标志位,开启定时器中断的话,不能完成相应的计时,会立即进入中断。 2、如果在开启定时器中断前清除了中断标志位,就会等待计时完成再出发中断。 3、主要是针对单次计时使用,尤其是对第一次计时有要求的程序。

    2024年02月01日
    浏览(55)
  • 定时器的设置和清除setTimeout、setInterval、setImmediate-NodeJs

    JS是单线程运行逻辑,所有的程序默认在一个线程执行,出现排队执行。所有的定时器中,回调函数会在主线程后事件队列中执行。              一次性定时器的 开启:当间隔时间到了,会调用 一次 回调函数,间隔时间的单位是毫秒。               var timer=setTimeout(回

    2024年02月04日
    浏览(44)
  • JavaScript定时器

    JavaScript定时器有两种, setTimeout():指定时间后执行一段代码(延迟执行)。 setInterval():每隔一段时间执行一段代码(间隔执行)。 1、setTimeout() 定时器 语法: setTimeout()方法用于设置一个定时器,该定时器在定时器到期后执行调用函数。 具体用法: 定时五秒钟出现弹窗‘

    2024年02月07日
    浏览(41)
  • javaScript定时器函数

    js 定时器有以下两个方法: setInterval() ,setTimeout() 作用  这个函数可以将一个函数每隔一段时间执行一次 返回值  返回一个Number类型的数据,这个数字用来作为定时器的唯一标识  可以用clearInterval()关闭setInterval()

    2024年02月08日
    浏览(61)
  • JavaScript的定时器用法详解

    ●在 js 里面,有两种定时器,倒计时定时器 和 间隔定时器 ○倒计时定时器也叫一次性定时器或者叫延时定时器 ○间隔定时器也叫间歇定时器或者叫反复性定时器 倒计时定时器 ●倒计时多少时间以后执行函数 ●语法: setTimeout(要执行的函数,多长时间以后执行) ●会在你设

    2024年02月14日
    浏览(42)
  • 【STM32H7 开发笔记】| 02 - 通过定时器级联方式同步启动多个定时器并输出 PWM 波形

    (STM32H723xE/G) 所有定时器包括 两个高级控制定时器、十二个通用定时器、两个基本定时器、五个低功耗定时器、两个看门狗定时器和一个SysTick定时器 。所有计时器计数器都可以在Debug模式下冻结。 本次实验主频配置的是500MHz 高级控制定时器(TIM1,TIM8)可以看作是在6通道

    2024年02月14日
    浏览(40)
  • 使用Js定时器来定时跳转

    🍎道阻且长,行则将至。🍓 Js小记🍀 记录:想实现在5秒后跳转到指定页面,使用到 JS定时器 和 Location 对象。 有两种定时器: setTimeout 和 setInterval ,一个是在指定时间结束后执行一次,另一个是根据指定时间循环。 Location 对象是 JavaScript 对地址栏封装的对象。可以通过操

    2023年04月08日
    浏览(43)
  • js实现定时器

    用原生js实现一个倒计时效果.最下面有全部源码,需要自取 js语法 : setTimeout :定时器 document.getElementById :Document的方法 getElementById()返回一个匹配特定 ID的元素。由于元素的 ID 在大部分情况下要求是独一无二的,这个方法自然而然地成为了一个高效查找特定元素的方法。 remove

    2024年02月11日
    浏览(72)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包