axios请求超时⾃动重新请求
时间: 2024-09-11 15:11:45 浏览: 49
vue axios请求超时的正确处理方法
axios是一个基于Promise的HTTP客户端,用于浏览器和node.js环境。它提供了一种简洁的API和丰富的配置选项,使得发起HTTP请求变得非常方便。在实际开发中,网络请求可能会因为各种原因失败或超时,这时我们可能需要进行自动重试的处理。axios本身不直接支持自动重试的功能,但是可以通过扩展拦截器来实现。
以下是一个使用axios拦截器实现请求超时自动重试的方法:
1. 引入axios库。
2. 创建axios实例。
3. 使用实例的`interceptors.request.use`配置请求拦截器,以便为每个请求添加超时和重试的逻辑。
4. 使用实例的`interceptors.response.use`配置响应拦截器,以便根据响应状态决定是否重试。
5. 在请求拦截器中,可以设置请求的超时时间,并在超时后根据需要重新发起请求。
6. 在响应拦截器中,如果遇到特定的错误状态码,则可以触发重试逻辑。
示例代码如下:
```javascript
const axios = require('axios');
// 创建axios实例
const service = axios.create({
baseURL: process.env.BASE_API, // api的base_url
timeout: 60000 // 请求超时时间
});
// 请求拦截器
service.interceptors.request.use(
config => {
// 在这里可以添加请求的通用配置,比如添加token等
// 设置请求超时
config.timeout = 10000;
return config;
},
error => {
// 对请求错误做些什么
return Promise.reject(error);
}
);
// 响应拦截器
service.interceptors.response.use(
response => {
// 如果返回的状态码为200,说明接口请求成功,可以正常拿到数据
// 否则抛出错误
return response;
},
error => {
// 在这里可以统一处理错误
if (error.response && error.response.status === 408) {
// 例如请求超时(408)时重试,这里可以根据实际情况自定义重试的逻辑
// 注意:要避免无限重试
return service(error.config);
}
// 其他状态码错误
return Promise.reject(error);
}
);
// 使用service发起请求
service.get('/test')
.then(response => {
console.log('请求成功', response);
})
.catch(error => {
console.log('请求失败', error);
});
```
在实际应用中,可能需要根据不同的业务场景调整重试的逻辑,例如设置最大重试次数,避免因为网络问题导致的无限重试。
阅读全文