axios.canceltoken 如何使用
时间: 2023-10-27 07:07:35 浏览: 53
axios.cancelToken是用来取消请求的。可以创建一个cancel token并将其传递给axios请求的config中的cancelToken属性,如下所示:
const CancelToken = axios.CancelToken;
const source = CancelToken.source();
axios.get('/api/test', {
cancelToken: source.token
}).catch(function (thrown) {
if (axios.isCancel(thrown)) {
console.log('Request canceled', thrown.message);
} else {
// handle error
}
});
source.cancel('Operation canceled by the user.');
当你想取消请求时,只需调用source.cancel(reason)即可。注意:一旦请求被取消,就无法重新发送请求。
相关问题
axios.interceptors.request.use( config => { config.cancelToken = source.token // 全局添加cancelToken return config }, err => { return Promise.reject(err) } )加lodading效果
你可以在 axios 请求的拦截器中添加 loading 效果,具体操作如下:
1. 在发起请求前,定义一个全局变量,用于控制 loading 是否显示:
```
let loading = null;
```
2. 在请求拦截器中,显示 loading:
```
axios.interceptors.request.use(
config => {
// 显示loading
loading = ElementUI.Loading.service({});
config.cancelToken = source.token; // 全局添加cancelToken
return config;
},
err => {
return Promise.reject(err);
}
);
```
3. 在响应拦截器中,隐藏 loading:
```
axios.interceptors.response.use(
res => {
// 隐藏loading
loading && loading.close();
// 处理响应结果
// ...
return res;
},
err => {
// 隐藏loading
loading && loading.close();
// 处理异常
// ...
return Promise.reject(err);
}
);
```
这样,在发送请求时会显示 loading,请求结束后会隐藏 loading。需要注意的是,loading 必须在 axios 请求拦截器中定义,以确保在请求发起前就已经显示。同时,如果在请求过程中出现异常,也需要在响应拦截器中隐藏 loading。
axios.iscancel
axios.isCancel 是一个用于检查一个错误对象是否是 Axios 取消请求错误的方法。当使用 Axios 发送请求时,可以通过调用 `axios.CancelToken.source()` 方法来创建一个 cancel token(取消令牌),然后将该令牌传递给请求的 `cancelToken` 参数。如果在请求发送之前调用了 cancel token 的 `cancel()` 方法,那么该请求就会被取消,并且会返回一个带有 `isCancel` 属性的错误对象。通过检查该错误对象的 `isCancel` 属性,可以判断请求是否被取消。
以下是一个示例代码:
```javascript
import axios from 'axios';
const source = axios.CancelToken.source();
axios.get('/api/data', {
cancelToken: source.token
}).catch(function (error) {
if (axios.isCancel(error)) {
console.log('请求被取消:', error.message);
} else {
console.log('请求发生错误:', error.message);
}
});
// 取消请求
source.cancel('取消请求原因');
```
在上面的示例中,如果在请求发送之前调用了 `source.cancel()` 方法,那么请求就会被取消,并且会打印出 "请求被取消: 取消请求原因"。如果请求在发送之后返回了响应,但是在处理响应之前调用了 `source.cancel()` 方法,那么响应被忽略,并且不会触发 `.then` 或 `.catch` 回调。