async/await 写 fetch 需两次 await:先 await fetch() 得 response,再 await response.json() 等解析数据;需手动检查 response.ok 处理 4xx/5xx 错误,不同响应类型选对应解析方法,post 请求需配置 headers 和 json.stringify(body)。

用 async 和 await 写 Fetch 请求,核心是把 fetch() 调用包在异步函数里,再用 await 等待响应和数据解析,避免嵌套 .then(),代码更线性、易读、易错处理。
基本写法:await 两次,一次等响应,一次等 JSON
fetch() 返回 Promise,但返回的不是数据本身,而是 Response 对象;response.json()(或 .text() 等)也返回 Promise。所以通常要 await 两次:
- 第一次
await fetch(url)得到响应对象 - 第二次
await response.json()解析出 JS 数据
示例:
async function getUser() {
try {
const response = await fetch('/api/user');
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
console.log(data);
return data;
} catch (err) {
console.error('请求失败:', err);
}
}
处理不同响应类型:json / text / blob
根据接口返回内容选择对应解析方法,都需 await:
-
await response.json()—— 适合 JSON 接口(最常见) -
await response.text()—— 获取纯文本(如 HTML 片段、日志) -
await response.blob()—— 下载文件或处理二进制(如图片、PDF) -
await response.arrayBuffer()—— 需底层字节操作时用
发送带参数的 POST 请求
构造 fetch() 的第二个参数(options),设置 method、headers、body,注意 body 需是字符串(如 JSON.stringify()):
async function login(username, password) {
try {
const response = await fetch('/api/login', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ username, password })
});
return await response.json();
} catch (err) {
throw err;
}
}
错误处理要点:网络失败 ≠ HTTP 错误
fetch() 只在网络完全断开等极少数情况才 reject;4xx/5xx 状态码仍会 resolve,必须手动检查 response.ok 或 response.status:
- 没网或域名错误 → 进入
catch - 服务器返回 404、500 →
response.ok为false,需主动 throw - 推荐统一判断
if (!response.ok) throw new Error(...)
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











