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

在前端做大文件分片上传,或者其它中断请求时,需要暂停或重新请求,比如这里大文件上传时,可能会需要暂停、继续上传,如下GIF演示:

这里不详细说文件上传的处理和切片细节,后续有时间在出一篇,大文件上传,切片上传、断点续传、秒传等😀。

不扯远了,紧接本篇主题😅。

如何使用axios取消请求

axios中已经实现了取消请求的操作,一共

  • 第一种 从 v0.22.0 开始,Axios 支持以 fetch API 方式------ AbortController 取消请求,示例如下
javascript 复制代码
import axios from 'axios';
const controller = new AbortController();
let fetchSignal = controller.signal
axios.post('http://www.***.cn/', {
   signal: fetchSignal
}).then((response)=> {
   //...
});

// 取消请求,不支持message参数
controller.abort()
  • 第二种 使用CancelToken.source工厂方法创建一个 cancel token ,如下所示:
javascript 复制代码
import axios from 'axios';
let axiosSource = axios.CancelToken.source();
	
axios({
  method: 'post',
  url: 'http://www.***.cn/',
  data: formdata,// 提交的文件数据或其它参数
  cancelToken: axiosSource.token,
  headers: { 'Content-Type': 'multipart/form-data' },
}).then((response)=> {
    //...
});

// 取消请求,支持message参数
axiosSource.cancel('取消请求');
  • 第三种 通过传递一个executor函数到CancelToken的构造函数来创建一个 cancel token,这里就不介绍了,可以查看官网示例🧐。

本文采用第二种方式实现。

如何重新发送请求

在重新发送请求前,需要重新生成CancelToken.source,不然再也无法从该URL获得成功的响应,因为同一个CancelToken.source都会被取消请求,如下图打印结果:

所以在重新请求前,需要重新生成一个CancelToken.source,代码如下:

javascript 复制代码
// 重新发送请求
axiosSource = axios.CancelToken.source();
axios({
//....代码同上
})

最后在放上axios官网的说明及实例链接 点我直达

如果本文对您有帮助,还请点个小赞😉。
本文完~

相关推荐
风骏时光牛马1 小时前
生成一个移动端标题,只需要一个标题,不需要其他的任何文本。
前端
IT_陈寒2 小时前
Redis雪崩把我坑惨了,这是5年经验的教训
前端·人工智能·后端
SameX2 小时前
HarmonyOS ArkUI List 的侧滑删除 用 ListItem 的 swipeAction + endIcon 的做法
前端
usdoc文档预览4 小时前
USDOC系列之PPT文件在线编辑-VUE前端实现在线浏览器在线编辑PPT文档
前端·vue.js·编辑器·office365·ppt在线编辑·office文件在线编辑·文件在线编辑
用户2705077725244 小时前
Agent 调工具卡住?3 种超时与取消策略实测对比
前端
LuHang5 小时前
我一行代码没写,把领导派的活做成了公司内部系统😭
前端
明月_清风5 小时前
Meta 开源了一个 AI Native 组件库:Astryx,150+ React 组件,专为 AI Agent 而设计
前端·人工智能·ai编程
用户850869276156 小时前
秒杀系统中 Shell 脚本并发控制 Bug:究竟哪里出了
前端
程序员大阳7 小时前
HTML+CSS+JS对话式实战(3)-活动管理页实现查询、新增、删除API后端接口
javascript·css·html·实战·删除·查询·新增
炫酷的大高个8 小时前
6 亿播放的闪身步,我用前端算出 15 倍重心差
前端·javascript