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

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

为了避免在循环中重复调用同一接口,可以引入状态管理机制:当针对特定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的话 }); } }
http://www.cnnetsun.cn/news/130629.html

相关文章:

  • 29、Linux系统安全防护指南
  • 智能家居联动场景设计:5大核心模式与0故障部署策略
  • S7NetPlus工业自动化通信框架:构建高效PLC数据交互系统
  • 5步搞定OpenWrt Docker管理:告别命令行烦恼的终极方案
  • 【Halcon-1D测量】reset_fuzzy_measure 函数功能(用于重置模糊测量规则)
  • HTMLMinifier:3个让网站加载速度翻倍的实用技巧
  • Layui-Admin后台管理系统技术评估与实施指南
  • 全球TOP 10物联网公司都在用的Agent节能技术,你知道几个?
  • CSS Grid Generator终极指南:前端开发的高效工具
  • ELPV数据集实战指南:太阳能电池缺陷检测的完整解决方案 [特殊字符]
  • 【量子-经典Agent协同突破】:揭秘下一代智能系统融合架构
  • 在 Docker 中运行 Java JAR 包实战教程
  • 如何快速上手PPTist:从零开始掌握专业级在线PPT编辑
  • SpiffWorkflow终极指南:从零构建企业级工作流自动化系统
  • 从阅片到决策支持,医疗影像Agent究竟改变了什么?
  • 【从云端到终端】:边缘AI Agent模型压缩的3个关键转折点
  • PSD文件解析利器:Python库PSD Tools深度解析
  • 边缘Agent资源调度实战(从理论到落地的9个关键步骤)
  • odoo采购收货报表处理
  • 【金融合规监控盲区曝光】:80%风险源于这4个规则缺失
  • 河道流量水质监测系统解决方案
  • 从零开始构建AI Agent日志监控体系,企业级实践必备技能
  • MCP续证有效期怎么算?一文看懂微软官方政策与隐藏条款
  • 【大模型面试题】15道大模型多模态Agent高频面试题详解,从小白到高手全覆盖!
  • 5分钟快速部署NSMusicS:免费开源的终极音乐播放器完整指南
  • 配置效率提升8倍,MCP Azure量子扩展你必须知道的7个隐藏技巧
  • QQScreenShot终极使用手册:10个提升效率的截图技巧
  • 如何用AI Agent实现护理任务100%准时提醒?:一线专家实战经验分享
  • MCP SC-400合规报告配置全流程(从零到一键生成)
  • Kotaemon数学公式渲染:LaTeX支持配置方法