fetch api 不能仅写 fetch(url) 就完事,因为它只返回 promise,需手动调用 .json()/.text() 解析响应体,且 http 错误码(如 404)不会触发 reject,必须检查 response.ok 并手动抛错。

Fetch API 基本用法:为什么不能直接写 fetch(url) 就完事?
因为 fetch() 默认只返回一个 Promise,它不会自动解析响应体,也不会在 HTTP 状态码非 2xx 时抛错。你写 fetch('/api/users') 后直接 .then(data => console.log(data)),看到的会是 Response 对象,不是 JSON 数据。
- 必须链式调用
.json()、.text()或.blob()才能读取响应体 -
Response.ok是判断状态是否成功的可靠方式,Response.status是数字(如 404),但fetch不会因此 reject - 网络失败(如离线、DNS 错误)才会让 Promise reject;404、500 这类响应仍会 resolve
处理错误:404 和网络异常的区别在哪?
常见误区是把 catch 当成“捕获所有错误”的兜底——它只捕获网络层异常或 Promise rejection,对 response.status === 404 完全无感。
- 正确做法:先检查
response.ok,再手动throw new Error() - 示例:
fetch('/api/post/123') .then(res => { if (!res.ok) throw new Error(`HTTP ${res.status}`); return res.json(); }) .catch(err => console.error('请求失败:', err.message)); - 如果需要区分 404 和超时,得自己加
AbortController控制超时,fetch本身不支持 timeout 参数
POST 请求传参:body 里该用 JSON.stringify() 还是 FormData?
取决于后端接口接受的 Content-Type。
文章转信息图。将文章/笔记转化为手机可读的 HTML 信息图,自动匹配视觉风格。触发场景:文章转图、笔记转图、信息图、转小红书图、做张图、可视化这篇文章、文生图。
- 发 JSON:设
headers: { 'Content-Type': 'application/json' },body 用JSON.stringify({ name: 'alice' }) - 传文件或表单字段:用
FormData实例,不用设Content-Type(浏览器会自动生成带 boundary 的 multipart 类型) - 注意:
FormData在fetch中不能和JSON.stringify()混用;也别手动设置Content-Type为multipart/form-data,否则后端收不到字段
与 Axios 对比:Fetch 缺少哪些“开箱即用”的能力?
Fetch 是浏览器原生 API,轻量但裸露——没有默认超时、无请求拦截、不自动序列化参数、不合并重复请求、不内置 CSRF token 注入。
- 超时需配合
AbortController手动实现:const controller = new AbortController(); setTimeout(() => controller.abort(), 8000); fetch('/api/data', { signal: controller.signal }); - GET 参数拼接要自己写工具函数,
URLSearchParams可用但不处理嵌套对象 - Cookie 发送依赖
credentials选项:fetch(url, { credentials: 'include' }),默认是'omit',跨域时尤其容易漏
如果你项目里频繁需要错误统一处理、取消请求、上传进度、自动重试,Fetch 得自己封装一层;否则就用原生,别为了“看起来高级”硬套 Axios 的思维去改 Fetch。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










