axios中取消请求的使用

本文介绍了如何在axios中全局定义一个axiosController并配置信号,通过setAxiosController函数管理和创建AbortController实例,以实现请求的取消。每次请求前设置信号,请求被中断时需要重新初始化控制器。

axios中取消请求的使用

1.全局定义一个axios控制器变量 axiosController

let axiosController = new AbortController()

2.配置axios 对象signal

axios.defaults.signal = axiosController.signal;

3.创建setAxiosController函数

function setAxiosController() {
    axiosController = new AbortController()
} 

导出变量、函数

export {
axiosController,
setAxiosController
}

每次调用axiosController.abort()方法后就需要重新调用setAxiosController;

axios官网 取消请求
mdn官网 AbortController在fetch中的使用

### Axios 取消请求的方法与实现 Axios 确实支持取消请求的功能,这在某些场景下非常有用,例如用户在请求完成前跳转到其他页面或重复触发相同的请求时需要取消之前的请求。以下是 Axios 取消请求的两种主要方式:`CancelToken` 和 `AbortController`。 #### 1. 使用 CancelToken 取消请求 `CancelToken` 是 Axios 提供的一种旧版方式,尽管已被弃用但仍可使用。通过创建一个 `CancelToken` 实例,并将其传递给请求配置中的 `cancelToken` 属性,可以实现请求取消功能[^3]。 ```javascript // 引入 axios const axios = require('axios'); // 创建一个 CancelToken 源 const CancelToken = axios.CancelToken; const source = CancelToken.source(); // 发起 GET 请求,并传递取消令牌 axios.get('/user/12345', { cancelToken: source.token // 将取消令牌传递给 Axios }).then(response => { console.log(response.data); }).catch(thrown => { if (axios.isCancel(thrown)) { console.log('Request canceled', thrown.message); // 处理取消请求的情况 } else { console.error('Error:', thrown); // 处理其他错误 } }); // 在需要取消请求时调用 cancel 方法 source.cancel('Operation canceled by the user.'); // 取消请求并传递取消信息 ``` #### 2. 使用 AbortController 取消请求Axios v0.22.0 开始,推荐使用 `AbortController` 来取消请求。这是一种更现代化的方式,符合浏览器的标准 API[^4]。 ```javascript // 引入 axios const axios = require('axios'); // 创建一个 AbortController 实例 const controller = new AbortController(); // 发起 GET 请求,并传递 signal 属性 axios.get('/foo/bar', { signal: controller.signal // 将信号传递给 Axios }).then(response => { console.log(response.data); }).catch(thrown => { if (thrown.name === 'AbortError') { console.log('Request aborted'); // 处理取消请求的情况 } else { console.error('Error:', thrown); // 处理其他错误 } }); // 在需要取消请求时调用 abort 方法 controller.abort(); // 取消请求 ``` #### 3. 在封装的 Axios 中实现取消请求 在实际开发中,通常会对 Axios 进行封装以简化请求逻辑。以下是一个示例,展示如何在封装的 Axios 中实现取消请求的功能[^5]。 ```javascript // 封装的 Axios 请求函数 export function allListAPI(params, option) { return request({ url: '/url', method: 'get', params, ...option }); } // 使用 CancelToken 示例 const CancelToken = axios.CancelToken; const source = CancelToken.source(); allListAPI(Params, { cancelToken: source.token }) // 传递取消令牌 .then(res => { console.log(res); }) .catch(err => { console.log(err, 'err'); }); // 取消请求 source.cancel('取消请求时传递的信息'); ``` ### 注意事项 - 当请求取消时,Axios 会抛出一个错误对象,该对象具有 `isCancel` 属性,值为 `true`。可以通过检查 `axios.isCancel(error)` 来判断请求是否被取消[^3]。 - 如果使用 `AbortController`,则需要确保 Axios 的版本不低于 v0.22.0[^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值