axios请求到一半网络中断,拿不到请求的finally
时间: 2024-10-20 09:07:15 浏览: 44
vue axios 在页面切换时中断请求方法 ajax
Axios是一个流行的基于Promise的HTTP库,它允许你在浏览器和Node.js中发送HTTP请求。当你发起一个axios请求时,通常会期望在请求完成、失败或者取消时触发特定的回调函数。`finally`块在axios中主要用于处理无论请求结果如何都要执行的清理操作。
然而,当网络中断导致请求被取消(比如用户关闭了页面或者遇到了错误),axios不会像浏览器原生的XMLHttpRequest那样自动进入`finally`。你需要手动设置一个axios实例的配置,通过`cancelToken`来监听取消事件,然后在`cancelToken.promise.catch`中处理`finally`逻辑:
```javascript
import axios from 'axios';
const CancelToken = axios.CancelToken;
// 创建一个取消令牌
const source = CancelToken.source();
// 发起请求,并在被取消时执行finally逻辑
axios({
method: 'GET',
url: 'https://api.example.com/data',
cancelToken: source.token,
})
.finally(() => {
// 这里将始终运行,不管请求是否成功、被取消还是出错
console.log('Finally block executed');
try {
source.cancel('Request was cancelled'); // 如果你想提供更具体的取消原因
} catch (err) {
if (axios.isCancel(err)) {
console.log('Request cancelled as expected.');
} else {
throw err;
}
}
});
// 如果需要外部手动取消请求
source.unsubscribe();
```
阅读全文