09 Vue 3 接口请求与异步容错

发布时间:2026/8/8 8:34:27

09 Vue 3 接口请求与异步容错
Vue 3 接口请求与异步容错一、页面数据从哪里来真实 Vue 页面通常不会把全部数据写死在组件中而是从后端获取Vue 页面 ↓ 调用 API 封装函数 ↓ 发送 HTTP 后端服务 ↓ 返回 JSON Vue 更新 ref ↓ 模板和计算属性自动更新页面组件应关注“什么时候请求、如何保存结果、失败时如何展示”具体请求地址和 HTTP 配置通常封装到api目录。二、封装 API 函数importrequestfrom/utils/request;exportfunctiongetHeatDetail(heatId:string){returnrequest({url:/bof/heat/${heatId},method:get});}带查询参数exportfunctiongetHeatPlayback(heatId:string,params:{interval_seconds:number;signals:string;}){returnrequest({url:/bof/heat/${heatId}/playback,method:get,params});}页面中只调用const{data}awaitgetHeatDetail(heatId.value);三、async/awaitasyncfunctionloadHeatDetail(){constresponseawaitgetHeatDetail(heatId.value);heatMeta.valueresponse.data;}await会暂停当前异步函数等待 Promise 完成但不会阻塞整个浏览器线程。调用异步函数voidloadHeatDetail();或者awaitloadHeatDetail();是否等待取决于后续逻辑是否依赖结果。四、加载状态constloadingref(false);模板el-button :loadingloading clickloadData 刷新 /el-button main v-loadingloading 页面内容 /main函数asyncfunctionloadData(){loading.valuetrue;try{// 请求}finally{loading.valuefalse;}}将关闭 Loading 放在finally中能够保证成功和失败都执行。五、try/catch/finallyconsterrorMessageref();asyncfunctionloadData(){loading.valuetrue;errorMessage.value;try{const{data}awaitgetHeatDetail(heatId.value);heatMeta.valuedata;}catch(error:unknown){errorMessage.valuegetErrorMessage(error);}finally{loading.valuefalse;}}错误转换functiongetErrorMessage(error:unknown):string{if(errorinstanceofError){returnerror.message;}returnString(error);}六、首次加载与手动刷新复用同一函数onMounted((){voidloadData();});el-button clickloadData刷新/el-button这样首次加载和手动刷新不会出现两套重复逻辑。七、串行请求constdetailResultawaitgetHeatDetail(heatId.value);constplaybackResultawaitgetHeatPlayback(heatId.value);第二个请求必须等第一个完成。适合第二个请求依赖第一个结果需要明确执行顺序前一步失败后不应继续。如果两个接口相互独立串行会增加总等待时间。八、使用Promise.all()并行请求const[detailResult,playbackResult]awaitPromise.all([getHeatDetail(heatId.value),getHeatPlayback(heatId.value)]);两个请求同时发出总时间通常接近较慢请求的耗时。Promise.all()的特点任何一个 Promise 拒绝整个Promise.all()立即进入异常详情成功 回放失败 预测仍在请求 ↓ Promise.all 整体 rejected当所有数据都属于页面的必要条件时这种行为是合理的。九、使用Promise.allSettled()处理局部失败复杂大屏的各个区域可能相对独立炉次详情历史回放全流程预测线性回归预测。可以并行请求constresultsawaitPromise.allSettled([getHeatDetail(heatId.value),getHeatPlayback(heatId.value),predictFullProcess(heatId.value),predictLinearRegression(heatId.value)]);结果不会因为一个接口失败而整体抛出。判断状态const[detailResult,playbackResult]results;if(detailResult.statusfulfilled){heatMeta.valuedetailResult.value.data;}else{heatMeta.valuenull;setSectionError(详情接口失败);}if(playbackResult.statusfulfilled){playback.valueplaybackResult.value.data;}else{playback.valuenull;setSectionError(回放接口失败);}两种结果类型fulfilled → value rejected → reason十、局部容错的页面设计合理目标不是“任何失败都装作没发生”而是必要数据失败 → 阻断相关页面功能 可选数据失败 → 只降级对应区域 已有旧数据 → 必要时保留上一帧例如详情成功、回放成功、预测失败 ↓ 基础页面和回放正常显示 预测区域显示“模型服务不可达”这比整个页面白屏更符合监控系统需求。十一、错误应该分层页面级错误页面无法继续使用炉次不存在权限失败核心详情无法获取。区域级错误只有一个模块失败预测总线失败场数据失败控制状态失败。降级提示页面仍然可用但使用替代数据保留上一快照使用基础信号代替设备控制接口使用符号模型代替场数据使用历史预测结果。不同错误不应该全部写进同一个字符串否则一个区域的新错误可能覆盖另一个区域的重要提示。十二、保留上一帧实时请求失败时不一定要清空数据asyncfunctionloadSnapshot(){try{const{data}awaitgetSnapshot();snapshot.valuedata;snapshotError.value;}catch(error){snapshotError.value快照加载失败已保留上一帧。;if(!snapshot.value){showFatalError(error);}}}逻辑是已有数据 临时失败 → 保留旧数据并提示 首次请求就失败 → 显示更明显错误十三、不要在失败时无条件清空所有状态下面的做法可能让页面闪烁snapshot.valuenull;awaitloadSnapshot();更平滑的做法是保留旧值只有新请求成功后再替换。是否保留旧数据取决于业务旧数据必须同时显示时间戳或“数据已过期”提示避免被误认为实时结果。十四、请求门控与重复请求实时轮询可能在上一次请求未完成时再次触发。可以使用简单锁letsnapshotLoadingfalse;asyncfunctionloadSnapshot(){if(snapshotLoading){return;}snapshotLoadingtrue;try{const{data}awaitgetSnapshot();snapshot.valuedata;}finally{snapshotLoadingfalse;}}更复杂时可以为不同接口建立独立门控snapshot field-snapshot control-state避免一个接口的锁阻止其他独立接口。十五、请求竞争与过期结果用户快速切换炉次请求 H001 发出 请求 H002 发出 H002 先返回并显示 H001 后返回并覆盖 H002可以记录版本letloadVersion0;asyncfunctionloadHeatData(id:string){constversionloadVersion;const{data}awaitgetHeatDetail(id);if(version!loadVersion){return;}heatMeta.valuedata;}也可以使用AbortController或请求库提供的取消能力。十六、接口类型与数据校验const{data}awaitgetHeatDetail(heatId.value);heatMeta.valuedata;即使 API 函数声明了类型重要字段仍可能因后端异常缺失。可以检查if(!data||typeofdata.heat_id!string){thrownewError(模型服务字段缺失);}工业页面尤其需要区分请求失败接口成功但字段缺失字段存在但数据不可用数据可展示但不可用于模型。十七、加载函数的推荐结构asyncfunctionloadPageData(){if(!heatId.value){router.push(/heat);return;}loading.valuetrue;pageError.value;stopPlayback();stopPolling();try{const[detailResult,playbackResult,predictionResult]awaitPromise.allSettled([getHeatDetail(heatId.value),getHeatPlayback(heatId.value),getPrediction(heatId.value)]);handleDetailResult(detailResult);handlePlaybackResult(playbackResult);handlePredictionResult(predictionResult);if(displayMode.valuerealtime){awaitloadSnapshot();startPolling();}}finally{loading.valuefalse;awaitnextTick();resizeView();}}这类函数是页面数据加载的协调器。具体结果处理可以继续拆成小函数。十八、常见误区1. 所有接口都串行请求独立接口应考虑并行减少等待时间。2. 所有接口都放进Promise.all()可选模块失败时可能拖垮整个页面。3. Catch 中只打印控制台用户看不到错误页面也不知道是否应降级。4. 每个按钮都写一套请求逻辑首次加载和刷新应复用同一个函数。5. 实时轮询不处理请求重叠接口慢时会积累并发请求。6. 保留旧数据却不显示时间用户可能误把旧帧当成实时数据。十九、本章小结接口页面应建立四层能力API 封装 ↓ async/await 与加载状态 ↓ 并行请求与结果分流 ↓ 局部错误、旧帧保留和请求门控下一章将把前面知识组合起来实现实时轮询与历史数据回放。

相关新闻

3分钟学会用TCC-G15:Dell G15笔记本散热控制终极指南

3分钟学会用TCC-G15:Dell G15笔记本散热控制终极指南

2026/8/8 8:34:27

3分钟学会用TCC-G15:Dell G15笔记本散热控制终极指南 【免费下载链接】tcc-g15 Thermal Control Center for Dell G15 - open source alternative to AWCC 项目地址: https://gitcode.com/gh_mirrors/tc/tcc-g15 还在为Dell G15笔记本的散热问题烦恼吗&#…

OpenClaw会话失效问题解析与解决方案

OpenClaw会话失效问题解析与解决方案

2026/8/8 8:34:27

1. OpenClaw会话失效问题深度解析 最近在开发者社区里,不少用户反馈OpenClaw存在一个奇怪的现象:前一天还正常的对话会话,第二天重启后就完全"失忆"了。表面上看这似乎是记忆系统的问题,但经过我两周的实测和源码分析&a…

贪心算法实战:删数问题与单调栈优化详解

贪心算法实战:删数问题与单调栈优化详解

2026/8/8 8:34:27

1. 问题引入:从键盘到算法的删数博弈 刚接触信息学奥赛的同学,大概率会在贪心算法的章节里遇到这道经典题目:“删数问题”。题目描述很简单:给你一个位数不超过250位的正整数 k ,和一个需要删除的数字个数 s &…

技术决策:直接操作与规范流程的权衡与实战指南

技术决策:直接操作与规范流程的权衡与实战指南

2026/8/8 9:34:29

1. 先搞清楚“直接点”和“走程序”到底在说什么 “直接点还是走程序?”这个问题,乍一看像是个选择题,但在技术开发、系统运维、团队协作甚至日常沟通里,它其实是一个高频出现的决策困境。简单翻译一下: “直接点” …

C++五子棋项目实战:从零实现控制台游戏与核心算法

C++五子棋项目实战:从零实现控制台游戏与核心算法

2026/8/8 9:34:29

1. 项目概述:为什么选择用C写五子棋? 如果你正在学习C,或者想找一个能综合运用基础语法、数组、函数和简单算法的练手项目,那五子棋游戏开发绝对是个黄金选择。它不像俄罗斯方块那样需要复杂的图形刷新,也不像大型游戏…

高校双创教育服务门户:SpringBoot架构设计与实践

高校双创教育服务门户:SpringBoot架构设计与实践

2026/8/8 9:34:29

1. 项目概述:高校双创教育服务门户的设计初衷高校创新创业教育作为国家人才培养战略的重要组成部分,近年来在各院校快速普及。传统线下管理模式面临信息孤岛、资源分散、流程繁琐等痛点。我们团队基于SpringBoot框架开发的这套双创教育服务门户&#xff…

芯片功耗与热设计:从原理到PCB散热实战

芯片功耗与热设计:从原理到PCB散热实战

2026/8/8 9:34:29

1. 从一次“神秘”的芯片过热说起 最近在调试一块新设计的板子时,遇到了一个让我琢磨了好一阵子的现象:主控芯片在运行一个并不算复杂的算法时,表面温度摸起来烫得有点反常。用热成像仪一扫,局部热点接近了芯片规格书的结温上限。…

一款好用的微信聚合聊天工具丨AI替代客服效率翻10倍!

一款好用的微信聚合聊天工具丨AI替代客服效率翻10倍!

2026/8/8 9:34:29

在当下的数字化运营里,微信生态的客户资源管理绝对是企业私域运营的核心环节,但凡做私域的小伙伴,都深知把微信端的客户管好用好有多重要!但传统的微信客户管理模式,真的让客服团队踩了不少坑,各种问题扎堆…

毕设别扎堆普通教务!大学生入学审核校园细分系统,小众好讲不易撞题!

毕设别扎堆普通教务!大学生入学审核校园细分系统,小众好讲不易撞题!

2026/8/8 9:24:29

最近好多准备课设、毕设的学弟学妹跟我吐槽,一搜校园类项目全是综合教务、学生成绩管理,答辩极易和同学撞选题,老师听得多了很难留下印象;网上零散源码大多缺数据库、没有完整配套论文,光是修复各种运行bug就要熬通宵。…

ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案

ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案

2026/8/6 19:19:00

ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾经从网易云音乐下载了心爱的歌曲&am…

分布式配置中心选型实战:Nacos与Consul在创业场景下的对比

分布式配置中心选型实战:Nacos与Consul在创业场景下的对比

2026/8/8 5:17:40

分布式配置中心选型实战:Nacos与Consul在创业场景下的对比工程导读:本文深入讨论 分布式配置中心选型实战:Nacos与Consul在创业场景下的对比 在生产工程实践中的核心落地方案。基于 分布式架构与微服务设计 视角,剖析实际痛点、架…

MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案

MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案

2026/8/5 8:19:55

MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案 【免费下载链接】MoneyPrinterPlus AI一键批量生成各类短视频,自动批量混剪短视频,自动把视频发布到抖音,快手,小红书,视频号上,赚钱从来没有这么容易过! 支持本地语音模型chatTTS,fasterwhisper,…

昇腾AI代理实现多号通话自动化

昇腾AI代理实现多号通话自动化

2026/8/8 0:03:20

基于昇腾(Ascend)硬件与AtomGit AI社区的开源生态,结合AI Agent技术,可以实现一个模拟“通话重复使用机号复制”功能的安卓手机应用原型。其核心是利用AI Agent进行意图理解、任务编排和自动化操作,模拟或管理多号码的…

2026年Graph+AI Agents最新创新思路

2026年Graph+AI Agents最新创新思路

2026/8/8 0:03:20

本次围绕GraphAI Agents这个方向筛选了15篇高质量论文,都是近年来具有较高引用价值或方法创新的研究工作,其中部分来自IJCAI、AAAI、ICRA。 对于论文er来说,这些论文方法结构清晰、可复现性较强,在多个任务上都有可延展的空间。如…

Wand-Enhancer 指南:5分钟解锁Wand专业版功能,永久移除2小时限制

Wand-Enhancer 指南:5分钟解锁Wand专业版功能,永久移除2小时限制

2026/8/8 0:03:20

Wand-Enhancer 指南:5分钟解锁Wand专业版功能,永久移除2小时限制 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer 还在为Wan…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/8 5:07:31

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/7 8:02:42

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/8 2:30:15

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…