async/await 写 fetch 更清晰易读,需手动检查 response.ok 处理 HTTP 错误,配合 try/catch 捕获网络异常,并注意 POST 时设置 headers 和 JSON.stringify body,超时取消需用 AbortController 或 Promise.race 实现。

直接用 async/await 写 fetch 请求,比写 .then() 更清晰、更易读,也能更好处理错误和加载状态。
基础用法:用 await 等待 fetch 响应
fetch() 返回的是 Promise,所以可以直接 await。但注意:fetch 只有网络错误(如断网)才会拒绝 Promise;HTTP 错误状态(如 404、500)仍会进入 resolve,需要手动检查 response.ok 或 response.status。
- 先
await fetch(url)得到 Response 对象 - 再
await response.json()(或.text()、.blob())解析响应体 - 别忘了加
try/catch捕获网络异常
完整示例:带错误处理的 GET 请求
下面是一个安全可用的封装:
async function getData(url) {
try {
const response = await fetch(url);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
return await response.json();
} catch (err) {
console.error('请求失败:', err.message);
throw err;
}
}
// 使用
getData('https://jsonplaceholder.typicode.com/posts/1')
.then(data => console.log(data))
.catch(err => console.error(err));
POST 请求:记得设置 headers 和 body
发送 JSON 数据时,需显式设置 Content-Type,且把数据转成字符串传给 body:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
立即学习“Java免费学习笔记(深入)”;
method: 'POST'headers: { 'Content-Type': 'application/json' }body: JSON.stringify({ title: 'foo', body: 'bar' })
服务器返回后,同样要检查 response.ok 并解析结果。
避免常见坑:超时、取消、重复请求
fetch 本身不支持超时和取消,需手动实现:
- 超时:用
Promises.race()配合AbortController或定时器 - 取消:创建
AbortController,传入signal选项,调用abort()即可中断请求 - 防重复:可在发起前加个标记(如 loading 状态),或用函数节流/防抖控制调用频率
这些增强逻辑建议封装进统一请求函数,避免每次重复写。

















