错误处理与超时机制对比
在前端开发中,了解不同请求库的错误处理和超时机制至关重要,Axios 与 Fetch 在这方面存在显著差异。
一、Axios 的错误处理
- HTTP 状态码非 2xx 时抛出错误:
axios.get('/api/data')
.then(res => console.log(res.data))
.catch(err => {
console.error(err.response?.status, err.message);
});
- 网络错误与超时:
axios.get('/api/data', { timeout: 5000 })
.catch(err => {
if (err.code === 'ECONNABORTED') console.warn('请求超时');
});
- 拦截器统一处理:
axios.interceptors.response.use(
res => res,
err => {
console.error('请求出错:', err.message);
return Promise.reject(err);
}
);
二、Fetch 的错误处理
- 仅对网络错误或请求被阻止抛出异常:
fetch('/api/data')
.then(res => {
if (!res.ok) throw new Error(`HTTP error! status: ${res.status}`);
return res.json();
})
.catch(err => console.error(err));
- Fetch 默认不支持超时,需手动实现:
function fetchWithTimeout(url, timeout = 5000) {
return Promise.race([
fetch(url),
new Promise((_, reject) => setTimeout(() => reject(new Error('请求超时')), timeout))
]);
}
三、主要差异总结
| 特性 | Axios | Fetch |
|---|---|---|
| HTTP 非 2xx 错误处理 | 自动抛出错误,可在 catch 捕获 | 不抛出,需要手动检查 res.ok |
| 网络错误处理 | catch 捕获 | catch 捕获 |
| 超时设置 | 支持 timeout 配置 |
不支持,需手动实现 |
| 请求/响应拦截器 | 内置支持,可全局统一处理 | 无内置拦截器,需要封装 |
四、选择建议
- Axios:适合需要统一错误处理、超时控制、请求拦截的项目,API 简单,兼容性好。
- Fetch:原生浏览器 API,轻量但需自行处理错误和超时,适合小型项目或只需简单请求。
五、小结
理解 Axios 与 Fetch 的错误处理与超时机制差异,能够帮助前端开发者设计稳定可靠的接口调用逻辑,并结合项目需求选择最适合的方案。
相关内容
- 缓存与重复请求优化 本章节介绍如何在前端项目中使用 Axios 优化请求缓存与防止重复请求,包括浏览器缓存、内存缓存、请求去重策略、拦截器结合缓存、缓存过期处理等方法,帮助提高接口...
- 前端容错与兜底策略 本章节讲解如何在前端使用 Axios 实现容错与兜底策略,包括请求失败处理、默认数据返回、全局错误提示、降级方案、备用接口调用等方法,确保应用在网络异常或接口异...
- 接口统一管理与类型定义 本章节介绍如何在前端项目中使用 Axios 统一管理接口请求,包括接口模块化、统一封装、请求类型定义、TypeScript 类型约束、接口文档维护及调用规范化。...
- 取消请求(CancelToken 与 AbortController) 本章节讲解如何在 Axios 中取消请求,包括使用 CancelToken 和 AbortController 两种方式,适用于用户快速切换页面或重复请求时,防...
- 同时发送多个请求(axios.all / axios.spread) 本章节讲解如何使用 Axios 同时发送多个请求,包括 axios.all 和 axios.spread 的使用方法,帮助前端项目高效处理并发请求,提高数据获取...
- 防止重复请求的策略 本章节讲解如何在 Axios 中防止重复请求,包括使用请求标识、拦截器和节流/防抖机制,避免用户多次触发同一接口导致的冗余请求,提高前端性能和接口稳定性。