axios 请求中断和请求重试

请求中断​

请求已经发出去了,如何取消掉这个已经发出去的请求?

微信扫码体验一下 (说不定哪天你就用得上)

在这里插入图片描述

用途

  1. 比如取消正在下载中的文件
  2. 点击不同的下拉框选项,向服务器发送新请求但携带不同的参数,响应回来的数据在折线图里面展示。每次请求的数据量较大,但其实只要渲染最后一次选择。
  3. 应用场景迁移,一般在数据量较大的情况下,可通过请求中断,节省网络资源

做法

通过 AbortController 中断请求
<script setup lang="ts">
import axios from 'axios'
import { ref } from 'vue'

const progress = ref(0) // 进度条百分比
let controller: AbortController // 中止控制器

// 中止下载
const abortDownload = () => {
  if (controller) {
    controller.abort() // 使用 abort 方法中止下载
    console.log('中止下载')
  }
}

// 下载视频
const fetchVideo = () => {
  controller = new AbortController() // 创建 AbortController
  axios({
    // 将中止控制器传递给 axios 的 get 方法
    method: 'GET',
    url: 'http://localhost:3000/video',
    signal: controller.signal,
    responseType: 'arraybuffer',
    onDownloadProgress: (progressEvent) => {
      // 计算进度百分比
      progress.value = Math.round((progressEvent.loaded / progressEvent.total!) * 100)
    }
  })
    .then((response) => {
      console.log('下载完成', response)
      // ✅ 保存下载的文件
      const { buffer } = new Uint8Array(response.data)
      const blob = new Blob([buffer], { type: 'application/octet-stream' })
      const link = document.createElement('a') // 创建链接元素
      link.href = URL.createObjectURL(blob) // 将 Blob 对象转换为 URL
      link.download = 'video.mp4' // 设置文件名
      link.click() // 模拟点击链接元素
    })
    .catch((err) => {
      if (axios.isCancel(err)) {
        console.log('下载被取消')
      } else if (err.name === 'AbortError') {
        console.log('下载被中止')
      } else {
        console.error(`下载错误:${err.message}`)
      }
    })
}
</script>

<template>
  <div>
    <button class="download" @click="fetchVideo">下载视频</button>
    <button class="abort" @click="abortDownload">中止下载</button>
    <div class="progress-bar">
      <div class="progress" :style="{ width: progress + '%' }"></div>
      {{ progress }}%
    </div>
  </div>
</template>

<style scoped>
.progress-bar {
  height: 20px;
  background-color: #eee;
  margin-top: 10px;
}
.progress {
  width: 0%;
  height: 100%;
  background-color: #4caf50;
  transition: width 0.2s linear;
}
</style>

拓展一个插件 axios-retry 插件

1 .axios-retry 1.6k 插件可以更方便实现请求重试。
2. 配置 axios-retry 核心属性

<script setup lang="ts">
import axios from 'axios'
import axiosRetry from 'axios-retry'

const request = axios.create({
  baseURL: 'http://localhost:3000',
  timeout: 2000,
})

// axios-retry 插件
axiosRetry(request, {
  retries: 3, // 设置重试次数
  retryDelay: () => 500, // 设置重试延迟时间
  shouldResetTimeout: true, // 重置请求超时时间
  retryCondition: (error) => ['ECONNABORTED', 'ERR_NETWORK'].includes(error.code!), // 重试条件
})

// 请求中止控制器
let controller: AbortController
// --- 获取数据 ---
const getData = async () => {
  // 请求控制器
  controller = new AbortController()
  const res = await request({
    method: 'GET',
    url: '/delay_3s_data',
    signal: controller.signal, // 添加请求中止标识
  })
  console.log('成功获取数据', res)
}

const stop = () => {
  // 中止网络请求
  controller.abort()
}
</script>

<template>
  <h1>axios请求重试-axiosRetry</h1>
  <button @click="getData()">发送请求</button>
  <button @click="stop()">中止请求</button>
</template>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/557542.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解决系统报错:此应用无法在你的电脑上运行

在开发过程中不知从何时起&#xff0c;使用电脑时过程中不断的都显示“此应用无法在你的电脑上运行”&#xff0c;让人非常恶心&#xff0c;一直以为是系统误操作了什么或误安了软件 百度的答案就是让你找到报错的软件用兼容模式运行。而我连报错的软件都不知道&#xff0c;让人…

盲人盲杖:科技革新,助力视障人士独立出行

在我们的社会中&#xff0c;盲人朋友们以其坚韧的精神风貌&#xff0c;生动诠释着生活的多样与可能。然而&#xff0c;当我们聚焦于他们的日常出行&#xff0c;那些普通人视为寻常的街道、路口&#xff0c;却成为他们必须面对的严峻挑战。如何切实提升盲人盲杖的功能&#xff0…

怎么检查3d模型里的垃圾文件---模大狮模型网

在处理3D模型时&#xff0c;经常会遇到一些不必要的垃圾文件&#xff0c;它们可能占据硬盘空间&#xff0c;增加文件大小&#xff0c;甚至影响模型的性能和质量。因此&#xff0c;及时检查和清理这些垃圾文件对于优化工作流程和提高效率非常重要。在本文中&#xff0c;我们将介…

利用Python进行大规模数据处理【第173篇—数据处理】

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 利用Python进行大规模数据处理&#xff1a;Hadoop与Spark的对比 随着数据量的不断增长&…

CSS中position属性总结

CSS中position属性的总结 如果我的文章看不懂&#xff0c;不要犹豫&#xff0c;请直接看阮一峰大佬写的文章 https://www.ruanyifeng.com/blog/2019/11/css-position.html 1 干嘛用的 用来定位HTML元素位置的&#xff0c;通过top、bottom、right、left定位元素 分别有这些值&a…

【DM8】ODBC

官网下载ODBC https://www.unixodbc.org/ 上传到linux系统中 /mnt下 [rootstudy ~]#cd /mnt [rootstudy mnt]# tar -zxvf unixODBC-2.3.12.tar.gz [rootstudy mnt]# cd unixODBC-2.3.12/ [rootstudy unixODBC-2.3.12]# ./configure 注意&#xff1a;若是报以上错 则是gcc未安…

双向链表(带头双向循环链表)的实现

前言&#xff1a;前面实现的单向链表&#xff0c;全称是不带头单向不循环链表。这里实现带头双向不循环链表&#xff0c;比单向链表好实现一点。 目录 链表的分类 单向链表与双向链表的比较&#xff1a; 双向链表的节点的定义&#xff1a; 多文件实现&#xff1a; List.h来…

B007-二维数组方法

目录 二维数组一维数组回顾二维数组定义与创建二维数组的遍历二维数组堆栈图特殊的char数组 方法main方法认识自定义方法调用同类中方法调用不同类中方法方法的参数方法的返回值方法签名方法重载 二维数组 一维数组回顾 二维数组定义与创建 二维数组的遍历 /*** 二维数组:* …

230元的通配符证书是最便宜的吗

随着互联网的发展&#xff0c;越来越多的人认为需要保护用户在网站中传输的数据&#xff0c;因此各个数字证书颁发机构颁发各种数字证书来为网站传输信息进行加密。其中通配符SSL证书是比较受欢迎的一款域名数字证书&#xff0c;这款SSL证书可以用一张证书保护主域名以及主域名…

为什么选择TikTok直播专线而不是节点?

TikTok直播已成为许多商家的重要营销手段&#xff0c;而网络质量作为营销直播效果的关键因素&#xff0c;使得商家们开始应用TikTok直播专线。虽然与节点相比&#xff0c;专线的价格稍高&#xff0c;但更多商家都倾向于选择TikTok直播专线。那么&#xff0c;为什么TikTok直播更…

Nginx内存池相关源码剖析(一)总览

剖析nginx的内存池源码&#xff0c;讲解原理实现以及该内存池设计的应用场景 介绍 Nginx内存池是Nginx为了优化内存管理而引入的一种机制。在Nginx中&#xff0c;每个层级&#xff08;如模板、TCP连接、HTTP请求等&#xff09;都会创建一个内存池进行内存管理。当这些层级的…

5款开源、美观、强大的WPF UI组件库

前言 经常看到有小伙伴在DotNetGuide技术社区微信交流群里提问&#xff1a;WPF有什么好用或者好看的UI组件库&#xff1f;,今天大姚给大家分享5款开源、美观、强大、简单易用的WPF UI组件库。 WPF介绍 WPF 是一个强大的桌面应用程序框架&#xff0c;用于构建具有丰富用户界面…

mysql 5.7分组报错问题 Expression #1 of ORDER BY clause is not in GROUP BY clause

解决方案&#xff1a; select version(), sql_mode;SET sql_mode(SELECT REPLACE(sql_mode,ONLY_FULL_GROUP_BY,)); 完美的解决方案是&#xff1a; 1 show variables like "sql_mode"; 2 3 set sql_mode; 4 set sql_modeNO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABL…

编程新手必看,Python3中数据结构知识点及语法学习总结(21)

介绍&#xff1a;在Python3中&#xff0c;数据结构是组织和存储数据的有效方式&#xff0c;它们对于编写高效且可维护的代码至关重要。以下是对Python中常见内置数据结构的介绍&#xff1a; 字典&#xff08;Dictionaries&#xff09;&#xff1a; 字典在Python中是一个非常核…

跟TED演讲学英文:How AI can save our humanity by Kai-Fu Lee

How AI can save our humanity Link: https://www.ted.com/talks/kai_fu_lee_how_ai_can_save_our_humanity Speaker: Kai-Fu Lee Date: April 2018 文章目录 How AI can save our humanityIntroductionVocabularyTranscriptSummary后记 Introduction AI is massively trans…

抖音爆火的产品都具备哪些特点,该如何选品?

抖音的崛起给许多创业者带来了商机&#xff0c;很多人选择在抖音开设小店。 对于拥有自己的小店的商家来说&#xff0c;如何提升商品曝光率是非常重要的。 而抖音选品广场就是一个非常好的平台。 抖音选品广场是抖音的一个分区&#xff0c;专门展示各种有特色的商品&#xf…

【若依前后端分离】仪表盘绘制

示例&#xff1a; 代码&#xff1a; InstrumentPanel.vue组件 <template><div><!-- 在这里放置你的图表组件 --><div ref"echarts" style"width: 100%; height: 400px;"></div></div> </template><script&g…

2024中国国际中医药健康服务博览会(7月深圳中医药展)

聚焦中医国粹&#xff0c;助力健康中国 2024第五届中国国际中医药健康服务&#xff08;深圳&#xff09;博览会 暨粤港澳大湾区中医药高质量发展大会 邀请函 时间&#xff1a;2024年7月31日-8月2日 地址:深圳会展中心&#xff08;福田&#xff09; 支持单位&#xff…

(2022级)成都工业学院数据库原理及应用实验四: SQL简单查询

写在前面 1、基于2022级软件工程/计算机科学与技术实验指导书 2、成品仅提供参考 3、如果成品不满足你的要求&#xff0c;请寻求其他的途径 运行环境 window11家庭版 Navicat Premium 16 Mysql 8.0.36 实验要求 在实验三的基础上完成下列查询&#xff1a; 1、查询所有…

react 响应式栅格布局

遇到一个小问题 , 有很多的下拉框放在了一行的盒子里 用到了栅格思路 , 但响应式处理屏幕时候右侧的按钮会覆盖掉样式 之前我的思路是子绝父相 , 将按钮定在最右侧 , 按钮和下拉框都在同一盒子中 , 且做了栅格处理没想到还是会覆盖解决 : 后来我用到了 margin-left: auto 来让…