优化axios封装之配置使用AbortController取消重复请求 防止用户频繁操作调用接口

这篇具有很好参考价值的文章主要介绍了优化axios封装之配置使用AbortController取消重复请求 防止用户频繁操作调用接口。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

当数据量过大请求缓慢时用户点击按钮或者tab标签页快速重复调用同一个请求时,会导致数据错乱,当只需要最新的请求数据,并且中断上一个重复请求时,可以利用axios的CancelToken去中断之前的请求。
ps:由于不是所有请求都需要这个逻辑 所以我封装的时候增加了请求配置项removeCache,如果传了则取消重复请求,这样就不会影响其他的请求了文章来源地址https://www.toymoban.com/news/detail-768521.html

在封装的axios文件(我这里是request.js)里增加逻辑

1.定义变量
// isCancel-取消标识 用于判断请求是不是被AbortController取消的
const { isCancel } = axios
const cacheRequest = {}
2.定义删除缓存队列中请求的函数
// 删除缓存队列中的请求
function removeCacheRequest(reqKey) {
  if (cacheRequest[reqKey]) {
    // 通过AbortController实例上的abort来进行请求的取消
    cacheRequest[reqKey].abort()
    delete cacheRequest[reqKey]
  }
}
3.在请求request拦截器里添加标识 将需要清除的请求增加到缓存队列里
service.interceptors.request.use(config => {
	// removeCache - 是config里配置的是否清除相同请求的标识,不传则默认是不需要清除
	// 此处根据实际需求来 如果需要全部清除相同的请求功能 则默认为true 或者增加白名单
	const { url, method, removeCache = false } = config
	if (removeCache) {
    	// 请求地址和请求方式组成唯一标识,将这个标识作为取消函数的key,保存到请求队列中
    	const reqKey = `${url}&${method}`
    	// 如果config传了需要清除重复请求的removeCache,则如果存在重复请求,删除之前的请求
    	removeCacheRequest(reqKey)
    	// 将请求加入请求队列,通过AbortController来进行手动取消
    	const controller = new AbortController()
   		config.signal = controller.signal
    	cacheRequest[reqKey] = controller
  	}
})
4.在响应response拦截器里请求成功后在队列里移除,请求失败error里判断,使得CancelToken取消的请求不做任何处理
service.interceptors.response.use(res => {
  // 请求成功,从队列中移除
  const { url, method, removeCache = false } = res.config
  if (removeCache) removeCacheRequest(`${url}&${method}`)
}), error => {
  if (isCancel(error)) {
    // 通过CancelToken取消的请求不做任何处理
    return Promise.reject({
      message: '重复请求,自动拦截并取消'
    })
  }
}
5.使用
// 根据自己项目封装的axios格式来 我这里是根据我项目的第二层封装来写的
export function getList(data) {
  return request({
    url: '/list',
    method: 'post',
    data: data,
    removeCache: true // 配置标识 则这个请求如果频繁请求 则会中断上次请求保留最新一次请求
  })
}

到了这里,关于优化axios封装之配置使用AbortController取消重复请求 防止用户频繁操作调用接口的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • axios使用axiosSource.cancel取消请求后怎么恢复请求,axios取消请求和恢复请求实现

    在前端做大文件分片上传,或者其它中断请求时,需要暂停或重新请求,比如这里大文件上传时,可能会需要暂停、继续上传,如下GIF演示: 这里不详细说文件上传的处理和切片细节,后续有时间在出一篇,大文件上传,切片上传、断点续传、秒传等😀。 不扯远了,紧接本

    2024年02月12日
    浏览(40)
  • axios中取消请求的使用

    1.全局定义一个axios控制器变量 axiosController 2.配置axios 对象signal 3.创建setAxiosController函数 导出变量、函数 每次调用axiosController.abort()方法后就需要重新调用setAxiosController; axios官网 取消请求 mdn官网 AbortController在fetch中的使用

    2024年02月07日
    浏览(45)
  • Axios中使用CancelToken取消请求

    CancelToken 是一个用于取消请求的机制。它允许在请求还未完成时,通过取消请求来终止请求的发送。这在需要在某些情况下中止正在进行的请求时非常有用,比如文件上传时取消上传等。 以下是使用 CancelToken 的一般步骤: 首先,导入 Axios 库和相关的依赖: 创建一个 Cancel

    2024年02月10日
    浏览(47)
  • axios封装/基础配置

    步骤:装包 - 封装axios实例 -调用实例发送请求 1. 装包 npm install axios 2. 封装 axios基础配置 3. 调用实例 发送请求 参考: 起步 | Axios 中文文档 | Axios 中文网 (axios-http.cn)

    2024年02月09日
    浏览(34)
  • Vue3创建项目(四)axios封装及接口配置

    项目结构:  目录  🍉🍉🍉index.ts  🍉🍉🍉 api.ts 看完需要预计花费10分钟。 请求拦截器与响应拦截器  阅读下面代码需先了解以下内容:         请求拦截器:     请求拦截器的作用是在请求发送前进行一些操作,例如在每个请求体里加上token,每次请求携带token传给

    2024年02月03日
    浏览(54)
  • vue3【使用axios并封装axios请求】

    第一步:安装axios 第二步:编写请求文件 新建request.js 简单的axios封装,里面相关提示信息,自己可以引入element-plus去添加

    2024年02月04日
    浏览(58)
  • SpringBoot&Vue&EmementUI前后端分离整合、统一封装axios、跨域配置

    🧑‍💻作者名称:DaenCode 🎤作者简介:CSDN实力新星,后端开发两年经验,曾担任甲方技术代表,业余独自创办智源恩创网络科技工作室。会点点Java相关技术栈、帆软报表、低代码平台快速开发。技术尚浅,闭关学习中······ 😎人生感悟:尝尽人生百味,方知世间冷暖。

    2024年02月09日
    浏览(39)
  • 使用ts封装一个Axios请求

    下面是一个简单的 TypeScript 版本的封装 Axios 请求的例子,基于 Axios 0.21.1 版本: 在这个示例中,我们首先定义了一个通用的响应结构 ApiResponse,用来包装 API 返回的数据,包括状态码、数据和消息等信息。然后,我们创建了一个 Axios 实例,定义了请求和响应拦截器,以及封装

    2024年02月16日
    浏览(43)
  • vue2使用axios封装请求数据,教会你封装,简单易懂,轻松学会axios封装请求数据 看一眼就会 手把手教会

    2、完成上面的步骤还不够,还需要再创建一个文件夹api,然后在文件夹里面创建自定义的文件名(我创建的是cartApi.js)文件名根据自己的需求命名 下面就是根据自己的请求接口以及数据参数请求,下面的请求是一些常见的post、get请求以及传参啥的(仅供参考,可以参考下面

    2024年01月24日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包