news 2026/5/6 3:21:20

防止接口重复调用的状态管理技巧

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
防止接口重复调用的状态管理技巧

为了避免在循环中重复调用同一接口,可以引入状态管理机制:当针对特定ID的接口调用启动时,将其标记为"进行中"状态,阻止后续重复请求。待接口返回数据后,再更新存储状态并清除标记。

这段代码的核心是避免重复请求图表接口,通过「缓存(chartConfigCache)+待处理列表(pendingCharts)」双重校验,保证同一个图表 ID 只会被请求一次,提升页面性能、减少接口压力。

const chartConfigCache = new Map(); const pendingCharts = ref([]); // 在循环外面定义 // ========== 步骤1:准备基础数据 ========== // 1. 从外层数据中提取图表唯一ID(核心标识) const chartId = outerJson?.id; // 2. 检查该图表是否已经在pendingCharts列表中(是否正在/已经处理) const chartExistsInPending = pendingCharts.value.some(chart => chart.id === chartId);
// ========== 步骤2:优先校验缓存(最高优先级) ========== // 从缓存Map中获取该图表的历史数据 const cachedData = chartConfigCache.get(chartId); if (cachedData) { // 缓存命中:直接把缓存数据存入pendingCharts(供页面渲染) pendingCharts.value.push({ id: chartId, content: cachedData.content, // 缓存的图表内容 height: cachedData.height, // 缓存的图表高度 timestamp: Date.now() // 记录最新时间戳 }); continue; // 跳过后续所有逻辑(包括接口请求) }
// ========== 步骤3:校验待处理列表(次优先级) ========== if (chartExistsInPending) { // 该图表已在处理中/已处理,直接跳过,避免重复请求 continue; }
// ========== 步骤4:无缓存+未处理 → 发起接口请求 ========== // 第一步:先标记为“处理中”(存入空数据),防止并发请求 pendingCharts.value.push({ id: chartId, content: null, // null表示正在处理,未拿到数据 height: null, timestamp: Date.now() }); // 第二步:调用接口获取图表真实数据 const res = await getEchartsData(outerJson.id); if (res.code == 200) { // 接口请求成功 if(res.result && res.result.output){ // 数据格式合法 // 找到pendingCharts中该图表的位置,替换为空数据为真实数据 const chartIndex = pendingCharts.value.findIndex(chart => chart.id === chartId); if (chartIndex !== -1) { pendingCharts.value[chartIndex] = { id: chartId, content: res.result.output, // 接口返回的图表内容 height: res.result.height, // 接口返回的图表高度 timestamp: Date.now() }; } // 【补充】原代码漏了这一步:接口返回后应该存入缓存,下次直接用 chartConfigCache.set(chartId, { content: res.result.output, height: res.result.height, url: res.result.url // 如果有url的话 }); } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/5 5:05:24

24、数据备份、恢复与网络安全策略全解析

数据备份、恢复与网络安全策略全解析 1. 数据备份与恢复 在数据管理中,备份和恢复是至关重要的环节。有一些优秀的备份工具和解决方案可供选择。 - Storix System Administrator’s Toolkit :它允许用户在系统安装过程中进行多种操作,如更改文件系统类型、添加软件RAID…

作者头像 李华
网站建设 2026/5/1 5:08:41

CompareM基因组分析工具完整教程:从入门到精通

CompareM基因组分析工具完整教程:从入门到精通 【免费下载链接】CompareM 项目地址: https://gitcode.com/gh_mirrors/co/CompareM 想要深入了解基因组比较分析的核心技术吗?CompareM作为一款专业的生物信息学工具,能够帮助你快速完成…

作者头像 李华
网站建设 2026/5/5 17:50:48

AppleALC音频驱动:解锁macOS完美音频体验的终极方案

AppleALC音频驱动:解锁macOS完美音频体验的终极方案 【免费下载链接】AppleALC 项目地址: https://gitcode.com/gh_mirrors/app/AppleALC AppleALC是一款专为Hackintosh设计的开源内核扩展,能够为非苹果硬件提供完整的macOS音频支持。通过这个强…

作者头像 李华
网站建设 2026/5/1 15:06:15

24、深入解析 ESX 存储与网络配置:MUI、FC HBA 及虚拟网络操作指南

深入解析 ESX 存储与网络配置:MUI、FC HBA 及虚拟网络操作指南 在 ESX 环境中,存储和网络配置是保障系统稳定运行的关键环节。本文将详细介绍使用 MUI 对 VMFS 进行操作,以及添加 FC HBA VMFS、虚拟网络配置等内容,帮助你更好地管理 ESX 服务器。 1. 使用 MUI 操作 VMFS …

作者头像 李华
网站建设 2026/5/1 16:45:51

33、虚拟环境中的动态资源负载平衡与灾难恢复

虚拟环境中的动态资源负载平衡与灾难恢复 在虚拟环境中,动态资源负载平衡(DRLB)和灾难恢复(DR)是至关重要的两个方面。下面我们将深入探讨这两个关键领域的相关知识。 动态资源负载平衡(DRLB) VMware DRS(分布式资源调度器)是DRLB的一部分,它通过CPU使用率来决定虚…

作者头像 李华
网站建设 2026/5/3 5:31:17

36、ESX 备份、虚拟化发展与安全脚本全解析

ESX 备份、虚拟化发展与安全脚本全解析 一、VM 连接本地磁带设备 除了通过服务控制台自行配置外,还可将 VM 连接到本地磁带设备。构建 VM 时,可使用 SCSI 通用设备将 VM 连接到本地磁带设备。在此情况下,虚拟 SCSI 设备 ID 必须与物理 SCSI 设备 ID 匹配,且设备需为多目标…

作者头像 李华