首页 > 其他分享 >一个定时器的轮询,页面卸载清除轮询的定时器 ,js 接口5s轮询 轮询查询应用安装状态

一个定时器的轮询,页面卸载清除轮询的定时器 ,js 接口5s轮询 轮询查询应用安装状态

时间:2024-08-06 14:38:53浏览次数:8  
标签:定时器 清除 轮询 intervalId js 卸载 页面

在JavaScript中,如果您使用setInterval创建了一个定时器来进行轮询,并希望在页面卸载时清除这个定时器,您可以按照以下步骤实现:

示例代码:

// 假设这是查询应用安装状态的函数
function checkInstallationStatus() {
  // 这里应该是发起网络请求的逻辑
  // 例如使用 fetch API 获取应用安装状态
  console.log('Checking installation status...');
  // 模拟网络请求延迟
  return new Promise(resolve => setTimeout(resolve, 1000, { complete: false }));
}

// 用于存储 setInterval 返回的定时器ID
let intervalId;

// 启动轮询函数
function startPolling() {
  // 首先清除已有的定时器
  if (intervalId) {
    clearInterval(intervalId);
  }

  // 设置5秒轮询
  intervalId = setInterval(async () => {
    const info = await checkInstallationStatus();
    
    if (info.complete) {
      console.log('Installation complete.');
      // 停止轮询
      clearInterval(intervalId);
    } else {
      console.log('Installation not complete. Polling...');
    }
  }, 5000);
}

// 监听页面卸载事件
window.addEventListener('beforeunload', () => {
  // 清除定时器
  if (intervalId) {
    clearInterval(intervalId);
  }
});

// 初始化轮询
startPolling();

代码解释:

  1. checkInstallationStatus 函数:这是一个模拟查询应用安装状态的函数,实际使用时应替换为实际的网络请求逻辑。

  2. startPolling 函数:此函数用于启动轮询。它首先检查是否已有定时器在运行,如果有,则先清除。然后设置一个新的setInterval定时器,每隔5秒执行一次查询。

  3. beforeunload 事件监听器:当用户离开页面时(例如关闭标签页或导航到另一个页面),beforeunload事件会被触发。在事件处理函数中,我们清除之前设置的定时器,以防止内存泄漏。

  4. startPolling 调用:在页面加载时调用startPolling函数,开始轮询过程。

注意事项:

  • 使用clearInterval确保在页面卸载时清除定时器,避免无效的轮询请求。
  • beforeunload事件可能不会在所有情况下被触发,例如在某些浏览器的某些版本中,快速连续导航可能不会触发此事件。
  • 如果页面中有多个定时器或轮询逻辑,确保为每个定时器分配一个唯一的标识符,并在适当的时候清除它们。
  • 如果轮询涉及到用户数据的提交或重要操作,确保在页面卸载前处理好数据的保存或清理工作。

通过上述方法,您可以实现页面卸载时清除轮询定时器的逻辑,确保资源得到合理管理。

标签:定时器,清除,轮询,intervalId,js,卸载,页面
From: https://www.cnblogs.com/yoona-lin/p/18345097

相关文章

  • jsp码头船只出行及配套货柜码放管理系统的设计与实现
    点击下载源码jsp码头船只出行及配套货柜码放管理系统的设计与实现摘要伴随着全球化的发展,码头的物流和客运增多,码头业务迎来新的高峰。然而码头业务的增加,导致了人员成本和工作量的增多。为了解决这一基本问题,码头船只出行及配套货柜码放管理系统应运而生。此次码头船只......
  • Spring Boot 中使用 JSON Schema 来校验复杂JSON数据
    JSON是我们编写API时候用于数据传递的常用格式,那么你是否知道JSONSchema呢?在数据交换领域,JSONSchema以其强大的标准化能力,为定义和规范JSON数据的结构与规则提供了有力支持。通过一系列精心设计的关键字,JSONSchema能够详尽地描述数据的各项属性。然而,仅凭JSONSchema本......
  • 使用JS的input框实现音频文件的上传与播放功能
    在网页中实现音频文件的上传和播放功能,可以通过HTML的<input>元素和JavaScript来完成。下面是一个简单的示例,展示了如何使用HTML和JavaScript实现这个功能:HTML部分<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>音频上传与播放</title>......
  • Js函数柯里化
    //该函数就是接受不了多个参数//functionadd(x,y){//returnx+y;//}//console.log(add(1,2));//3//console.log(add(5,7));//12//接下来我们要将其进行柯里化//functionadd(x){//returnfunction(y){//returnx+y;//}......
  • Node.js安装配置(Windows系统)
    一、Node.js简单说就是运行在服务端的JavaScript二、安装Node.js步骤:1、首先找到Windows下的安装包(.msi)       建议安装Node.js v4.4.3(长期支持版本)  ^_^-------本安装教程以v5.2.0为例   Node.js安装包及源码下载地址为:https://no......
  • RSA非对称加密,前端JS加密,后端PHP解密
    RSA公钥/私钥在线生成:http://web.chacuo.net/netrsakeypair通过以上网址生成公钥/私钥对,私钥格式这里选择【PKCS#1】,如:公钥:-----BEGINPUBLICKEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDN3El4yr2maFvDo5PKIzkkiitJZEOTLNINH0RD0PL5Lob+YzbRJO6DX27SRuHcdlK7mFtkQvooW......
  • js、php实现前后端数据的base64编码和解码
    客户要求密码必须加密后再传送。javascript代码的加密函数:<scriptlanguage='javascript'>functionutf16to8(str){varout,i,len,c;out="";len=str.length;for(i=0;i<len;i++){c=str.charCodeAt(i);if(......
  • 一个基础的js,html示例程序
    需求背景:一个html,一个js脚本。要求html里面提供若干按钮。第1个按钮,点击之后,触发js里面的add函数,第2个按钮点击之后触发js里面的del函数。第3个按钮,点击之后,在按钮右侧,显示当前时间,每点击一次刷新下一次。还有,在每个函数调用里面,函数开通打印当前时间戳(精确到毫秒),函......
  • JS历理 文本高度自适应
    <!DOCTYPEhtml><html><head><metacharset="utf-8"><metaname="renderer"content="webkit"><metahttp-equiv="X-UA-Compatible"content="IE=edge,chrome=1">......
  • 【STM32】TIM定时器
    个人主页TIM定时器一、简介二、基本定时器三、通用定时器1、时钟源选择2、时基单元3、输出比较和输入捕获电路(1)输出比较①PWM波形②通用定时器的输出比较电路③输出模式控制器的逻辑④输出比较基本结构(2)输入捕获①测频率的方法②输入捕获电路③主从触发模式④输入捕......