Fetch 封装错误统一处理的核心是将网络请求、HTTP 状态码判断、业务错误解析三层逻辑收拢至一个函数:先用 async/await 包裹 fetch 并手动检查 response.ok 或 status,非 2xx 时读取 JSON/text 构造含状态码、响应体、URL 的错误对象;定义 NetworkError(无 response)、HttpError(status 非 2xx)、BizError(2xx 但 code 非 0)三类子类便于 instanceof 判断;支持 onError 回调或策略名配置差异化处理(如 401 登录态清理);默认集成 AbortController 超时控制(10s)并暴露 signal 参数,AbortError 需单独识别;关键在于提前约定“什么算错”和“错了怎么办”,避免重复手写 if-else。

Fetch 封装错误统一处理,核心是把网络请求、HTTP 状态码判断、业务错误解析这三层逻辑收拢到一个函数里,避免每个调用处重复写 try/catch 和状态校验。
封装基础 fetch 函数,拦截 HTTP 错误
原生 fetch 只在网络失败(如断网、DNS 失败)时 reject,2xx 以外的状态码(比如 401、500)仍算 resolve。所以第一步要手动检查 response.ok 或 response.status:
- 用
async/await包裹,便于统一抛错 - 对非 2xx 响应,读取
response.json()或response.text()获取错误详情 - 构造带状态码、响应体、URL 的错误对象,方便上层识别
统一错误类型,区分网络错误、HTTP 错误、业务错误
建议定义三类错误子类,让调用方能精准判断:
-
NetworkError:fetch 抛出的 TypeError、AbortError 等(无 response) -
HttpError:有 response 但 status 非 2xx(如 404、500) -
BizError:status 是 2xx,但后端返回了{ code: 1001, msg: "token 过期" }这类业务错误
这样 catch 时可用 error instanceof BizError 做特定处理(比如跳登录页)。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
支持配置化错误处理行为
不同接口可能需要不同策略,比如登录接口 401 要清 token 并跳转,普通列表接口 401 只提示“请重新登录”:
- 在封装函数中接受
onError回调,或传入预设策略名(如strategy: 'auth') - 内置默认行为(如 toast 提示),允许调用方覆盖
- 对 401/403 自动触发登出逻辑(需配合全局 auth 状态管理)
可选:集成 AbortController 与超时控制
避免请求挂起,提升体验:
- 默认添加 10s 超时,超时后 abort 请求并抛
AbortError - 暴露
signal参数,让调用方可手动中止(如页面卸载时) - 注意:
AbortError是 DOMException,需单独判断,不能靠 status 处理
不复杂但容易忽略细节,关键是把“什么算错”和“错了怎么办”提前约定好,而不是每次都在 .then 里手写 if-else。

















