错误隔离的核心是单请求失败不阻塞其他请求,Vue中应避免Promise.all而用Promise.allSettled,或手动包装为始终resolve的Promise,配合拦截器兜底与业务层降级实现柔性容错。
多个异步请求并发时,错误隔离的核心目标是:不让一个请求失败拖垮其他请求的正常响应,同时仍能准确识别和处理各自错误。Vue 中用 Axios 做并发请求,默认的 Promise.all 或 axios.all 是“全有或全无”策略——任一失败就整体 reject,这不满足错误隔离需求。真正可行的做法是让每个请求独立完成、独立报错,再统一收集结果。
这是最直接、标准的错误隔离方案。它不会因某个请求失败而中断其余请求,而是等所有请求都结束(无论成功或失败),返回每个请求的完整状态对象。
"fulfilled" 或 "rejected",可据此分别取数据或错误当项目环境不支持 Promise.allSettled(如需兼容旧版浏览器),可自行封装:
.then().catch() 包一层,确保它总是 resolve,并把原始响应或错误作为 payload 返回const req1 = axios.get('/user').then(res => ({ ok: true, data: res.data })).catch(err => ({ ok: false, error: err }))
Promise.all([req1, req2, req3]) 汇总,后续按 ok 字段分流处理错误隔离不只是并发层面的事,更要从请求源头降低失败概率和影响范围:
前端拿到并发结果后,要主动做“柔性处理”: