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

js 频繁点击切换两个按钮发送请求,显示最后一次发送请求的结果

在JavaScript中处理频繁点击切换两个按钮发送请求并显示最后一次发送请求的结果,可以通过以下几种方法来实现:

方法1:使用Promiseasync/await

你可以使用async/await来处理异步请求,并确保在发送请求时,之前的请求被取消或者忽略。这可以通过AbortController来实现。

 

let controller = null;async function fetchData(url) {if (controller) {controller.abort(); // 取消之前的请求}controller = new AbortController();const signal = controller.signal;try {const response = await fetch(url, { signal });const data = await response.json();console.log(data); // 处理数据return data; // 返回数据,可以在这里更新UI} catch (error) {if (error.name === 'AbortError') {console.log('Fetch aborted'); // 忽略取消的错误} else {console.error('Error:', error); // 处理其他错误}}
}// 绑定到按钮点击事件
document.getElementById('button1').addEventListener('click', () => {fetchData('https://api.example.com/data1');
});document.getElementById('button2').addEventListener('click', () => {fetchData('https://api.example.com/data2');
});

  

方法2:使用setTimeout延迟执行请求

如果你只是想简单地避免在短时间内多次点击导致的问题,可以使用setTimeout来延迟执行下一次请求,直到当前请求完成。

let requestPending = false;function fetchData(url) {if (requestPending) return; // 如果请求正在进行,则直接返回requestPending = true;setTimeout(() => { requestPending = false; }, 500); // 设置一个延迟,例如500毫秒后重置状态fetch(url).then(response => response.json()).then(data => {console.log(data); // 处理数据// 更新UI等操作}).catch(error => console.error('Error:', error)).finally(() => { requestPending = false; }); // 确保在完成后重置状态
}// 绑定到按钮点击事件
document.getElementById('button1').addEventListener('click', () => {fetchData('https://api.example.com/data1');
});document.getElementById('button2').addEventListener('click', () => {fetchData('https://api.example.com/data2');
});

  

方法3:使用fetch的缓存机制(不常用)

对于某些场景,如果你只是想获取最后一次请求的结果,可以考虑不立即处理响应,而是缓存它,然后在最后一次请求完成后处理。这种方法比较复杂,通常不推荐,除非有特定需求。例如:

let lastResponse = null;
let lastUrl = ''; // 用于记录最后一次请求的URL,以防万一需要区分处理不同的URL响应。function fetchData(url) {fetch(url).then(response => response.json()).then(data => {lastResponse = data; // 缓存最后一次响应的数据lastUrl = url; // 记录最后一次请求的URL(可选)if (url === lastUrl) { // 确保是最后一次请求的响应被处理(如果有多个按钮且有不同URL的情况)console.log(lastResponse); // 处理数据(只在最后一次请求后)// 更新UI等操作(只在最后一次请求后)}}).catch(error => console.error('Error:', error));
}

  

注意:这种方法在某些情况下可能不够准确,特别是在快速连续点击时。更好的方式是使用AbortController或延迟执行。

总结:推荐使用AbortController结合async/await的方法,它既简洁又有效

http://www.gsyq.cn/news/54209.html

相关文章:

  • 2025年餐饮火锅底料批发厂家权威推荐榜单:袋装火锅底料/火锅底料/火锅底料牛油入境美国源头厂家精选
  • 质量好的工业吸尘器推荐:多场景适用品牌解析
  • 工业吸尘器十大品牌推荐 2025年热门型号选购参考
  • 今年采购管理系统服务推荐榜
  • 今年采购管理系统开发公司推荐几家
  • 工厂用工业吸尘器选购指南与实用推荐
  • 2025年食品包装盒清废机制造厂权威推荐榜单:化妆品盒清废机/药盒清废机/礼盒自动清废机源头厂家精选
  • 洛谷 B4415:[GESP202509 四级] 排兵布阵 ← 暴力枚举法
  • 全球化仓储软件(WMS)哪家好?国内主流服务商盘点
  • sort自定义cmp
  • 2025年国内PMS酒店管理系统公司权威推荐排行榜
  • AtCoder Beginner Contest 430
  • SQL Server 2025 正式版发布 - 从本地到云端的 AI 就绪企业数据库
  • 虚拟机上redhat7.2安装oracle 11g
  • SLS 脱敏函数实践:智能化与数据安全的融合
  • PVE9安装R8125 2.5G网卡驱动、开启缓冲区、开启硬件多队列支持(基于联想来酷MiniPro)
  • 2025年吨包醋酸钠定制厂家权威推荐榜单:‌工业级乙酸钠/醋酸钠乙酸钠/醋酸钠乙酸钠源头厂家精选
  • 2025 最新钢管设备厂家权威推荐榜:3PE 防腐 / 抛丸除锈 / 涂塑喷粉设备综合测评重磅发布内壁抛丸除锈设备/涂塑设备,防腐设备,粉末喷涂设备,内外壁喷粉设备,抛丸除锈设备公司推荐
  • 2025 最新管道设备供应厂家口碑推荐榜:聚焦 3PE / 除锈 / 涂塑设备,精选品牌权威测评推荐管道除锈设备/管道涂塑设备/管道内壁喷粉设备/管道涂塑设备公司推荐
  • 2025年人参皂苷化学对照品源头厂家权威推荐榜单:维生素K2化学对照品/蜕皮激素化学对照品/麦角甾醇化学对照品源头厂家精选
  • 2025年警用指挥车供货厂家权威推荐榜单:越野应急指挥车/全顺无人机指挥车/双拓展指挥车源头厂家精选
  • 联想小新pad 2025刷机包下载(TB335FC刷机包)
  • 2025年滴灌过滤设备优质厂家权威推荐榜单:全自动砂石过滤器/农业离心过滤器/滴灌过滤器源头厂家精选
  • imu_tk阅读笔记
  • Docker 安装 Oracle 11g
  • linux do while
  • ICPC2025沈阳 游记
  • AVLT
  • 一线操作工也能管能耗?MyEMS 的 “傻瓜式仪表盘”,把专业数据变成 “大白话”
  • 2025年【口碑好的/比较好的/靠谱的】工业级/国产化/变电站/变电站/电力/机房/光伏/远动/发电厂/工业级/嵌入式机柜/通讯管理机【公司/工厂/厂家】推荐/排行榜 哪家好/强/靠谱