fetch 不会因 http 错误状态码(如 404、500)自动 reject,仅网络失败时 reject;需在 then 中检查 response.ok 或 status 判断并处理错误,配合 json()/text() 解析错误体,建议封装统一错误处理逻辑。

Fetch 不会因为 HTTP 错误状态码(如 404、500)而自动抛出异常,它只在网络失败(如离线、域名不可达)时 reject。所以 404 和 500 会进入 then 分支,需要手动检查 response.ok 或 response.status 来判断是否成功。
检查 response.ok 判断基本成功状态
response.ok 是一个布尔值,等价于 response.status >= 200 && response.status 。这是最简洁的常用方式:
- 如果
response.ok === false,说明响应是 4xx 或 5xx 状态,应按错误处理 - 注意:它不区分 404 和 500,只告诉你“不是成功响应”
- 建议在
then中第一时间检查,避免后续解析失败的 JSON 或 HTML
读取 response.status 获取具体状态码
当需要根据状态码做差异化处理(比如 401 跳登录、404 显示提示、500 重试),直接访问 response.status:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
-
response.status === 404表示资源未找到,可提示用户检查 URL 或返回上一页 -
response.status >= 500表示服务端错误,适合触发降级逻辑或显示“稍后再试” - 注意:status 始终是数字,即使后端返回了文本描述(如 “Internal Server Error”),它也只反映状态码本身
配合 response.json() / text() 处理错误响应体
很多 API 在错误时仍返回 JSON(如 { "error": "Not found" }),可以像正常响应一样解析:
- 调用
response.json()或response.text()获取错误详情,再结合 status 做业务提示 - 记得用
catch捕获解析失败(例如返回 HTML 页面却调用 json()) - 不要在
catch里假设所有错误都来自网络——fetch 的 catch 只捕获网络异常,HTTP 错误需在 then 中处理
封装成更易用的请求函数
为避免重复写状态检查逻辑,可封装一个基础 fetch 函数:
- 统一检查
!response.ok,并尝试解析错误信息 - 将错误信息(含 status 和 message)构造为 Error 实例,便于上层用 try/catch 捕获
- 支持传入自定义错误处理器,比如对 401 自动清理 token
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










