如何让 Axios 并行请求中过滤非 200 响应且不停整个流程?
- 内容介绍
- 文章标签
- 相关推荐
本文共计703个文字,预计阅读时间需要3分钟。
相关专题
使用 `promise.allsettled` 替代 `axios.all`,可确保所有请求无论成功或失败均返回结果,从而安全筛选出状态码非 200 的响应,避免因单个请求失败导致整个 promise 链被 `catch` 中断。
在使用 Axios 发起多个并发请求(如 axios.get)时,若任一请求返回非 200 状态码(例如 404、500),默认行为是触发 axios 的错误拦截机制——即整个 Promise.all(或旧版 axios.all)被拒绝,直接进入 catch 块,导致你无法访问其他成功响应的数据。这与 fetch 的默认“不自动 reject”行为不同,因此需要显式适配。
正确做法是绕过 Axios 自动抛错逻辑,改用原生 Promise.allSettled,它会等待所有 Promise 完成(无论 fulfilled 或 rejected),并统一返回包含 { status: 'fulfilled' | 'rejected', value | reason } 的结果数组。再结合 Axios 请求配置禁用自动错误抛出,即可实现精细化响应处理。
本文共计703个文字,预计阅读时间需要3分钟。
相关专题
使用 `promise.allsettled` 替代 `axios.all`,可确保所有请求无论成功或失败均返回结果,从而安全筛选出状态码非 200 的响应,避免因单个请求失败导致整个 promise 链被 `catch` 中断。
在使用 Axios 发起多个并发请求(如 axios.get)时,若任一请求返回非 200 状态码(例如 404、500),默认行为是触发 axios 的错误拦截机制——即整个 Promise.all(或旧版 axios.all)被拒绝,直接进入 catch 块,导致你无法访问其他成功响应的数据。这与 fetch 的默认“不自动 reject”行为不同,因此需要显式适配。
正确做法是绕过 Axios 自动抛错逻辑,改用原生 Promise.allSettled,它会等待所有 Promise 完成(无论 fulfilled 或 rejected),并统一返回包含 { status: 'fulfilled' | 'rejected', value | reason } 的结果数组。再结合 Axios 请求配置禁用自动错误抛出,即可实现精细化响应处理。

