位置: IT常识 - 正文

axios 取消请求:CancelToken(afn取消请求)

编辑:rootadmin
axios 取消请求:CancelToken

目录

示例代码:

步骤操作:

优化取消请求(细化错误问题):

 示例代码:

axios 请求拦截器中使用取消请求:

示例代码:

axios 批量发送请求:


推荐整理分享axios 取消请求:CancelToken(afn取消请求),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:axios请求一直是pending状态,axios取消请求发送,axios请求一直是pending状态,axios怎么中断请求,axios取消请求的原理,afn取消请求,axios取消请求的原理,axios取消请求的原理,内容如对您有帮助,希望把文章链接给更多的朋友!

注意:此方法(CancelToken),官方已经不推荐,推荐去看官网的方法

示例代码:<body> <button id="btn1">点我获取测试数据</button> <button id="btn2">取消请求</button> <script> const btn1 = document.getElementById('btn1'); const btn2 = document.getElementById('btn2'); const {CancelToken} = axios; //CancelToken能为一次请求‘打标识’ let cancel; btn1.onclick = async () => { axios({ url:'http://localhost:5000/test1?delay=3000', cancelToken: new CancelToken((c)=>{ //c是一个函数,调用c就可以关闭本次请求 cancel = c; }) }).then( response =>{console.log('成功了',response);}, error =>{console.log('失败了',error);} ) } btn2.onclick = () =>{ cancel(); } </script></body>步骤操作:

1.首先定义一个 CancelToken 来接收 axios 中 CancelToken 主要是为了’打标识

const {CancelToken} = axios; //CancelToken能为一次请求‘打标识’axios 取消请求:CancelToken(afn取消请求)

2.然后定义一个 cancel 变量 

let cancel;

3.在 axios 对象中配置 cancelToken: 

cancelToken: new CancelToken((c)=>{ //c是一个函数,调用c就可以关闭本次请求 cancel 的缩写 cancel = c;//赋值给外面的变量cancel 提升c的作用域?})

4.最后绑定在某个事件发生后想取消请求时调用:

//笔记中所写的事件为点击事件 任何事件都可以btn2.onclick = () =>{ cancel();}优化取消请求(细化错误问题):

说明:点击取消请求时,axios也会去失败的回调,但这不是服务器的错误导致的,是用户自身不需要本次请求,所以需要对于错误进行划分。以及如果用户反复点击,会发出多次请求,单只需要一次请求。

 示例代码:<body> <button id="btn1">点我获取测试数据</button> <button id="btn2">取消请求</button> <script> const btn1 = document.getElementById('btn1'); const btn2 = document.getElementById('btn2'); const { CancelToken, isCancel } = axios //CancelToken能为一次请求‘打标识’ let cancel; btn1.onclick = async () => { if(cancel) cancel();//避免多次反复请求 axios({ url: 'http://localhost:5000/test1?delay=3000', cancelToken: new CancelToken((c) => { //c是一个函数,调用c就可以关闭本次请求 cancel = c; }) }).then( response => { console.log('成功了', response); }, error => { if (isCancel(error)) { //如果进入判断,证明:是用户取消了请求 console.log('用户取消了请求,原因是', error.message); } else { console.log('失败了', error); } } ) } btn2.onclick = () => { cancel("任性,我就是不想要了"); } </script></body>

解释:cancel 函数可在括号中添加说明,在进入失败的回调时进行判断是服务器端发出的,还是用户自己取消的。

axios 请求拦截器中使用取消请求:示例代码:<body> <button id="btn1">点我获取测试数据</button> <button id="btn2">取消请求</button> <script> const btn1 = document.getElementById('btn1'); const btn2 = document.getElementById('btn2'); const { CancelToken, isCancel } = axios //CancelToken能为一次请求‘打标识’ let cancel; //请求拦截器 axios.interceptors.request.use(config => { if(cancel) cancel('取消了'); config.cancelToken =new CancelToken((c)=> cancel = c); //c是一个函数,调用c就可以关闭本次请求 return config; }); //响应拦截器 axios.interceptors.response.use(response => { return response.data; },error => { if (isCancel(error)) { //如果进入判断,证明:是用户取消了请求 console.log('用户取消了请求,原因是', error.message); } else { console.log('失败了', error); } return new Promise(()=>{}); }); //进行简化 btn1.onclick = async () => { const result = await axios.get('http://localhost:5000/test1?delay=3000'); console.log(result); } btn2.onclick = () => { cancel("我不想要了"); } </script></body>axios 批量发送请求:

使用了axios.all( ) 的API,括号中为数组,其中写需要并发的请求。

<body> <button id="btn1">点我获取测试数据</button> <script> const btn1 = document.getElementById('btn1'); btn1.onclick = async () => { axios.all([ axios.get('http://localhost:5000/test1'), axios.get('http://localhost:5000/test2'), axios.get('http://localhost:5000/test3'), ]).then( response =>{console.log(response);}, error =>{console.log(error);} ) }; </script></body>

解释:Axios.all( ) 基于 promise.all( ),所有的都是成功的回调才会返回数据,如果有一个失败的回调,就会走错误信息。此方法会按顺序打印 并发的三个请求的数据,并且如果用了延迟请求也会是原本的顺序,这是 axios 封装好的。 

本文链接地址:https://www.jiuchutong.com/zhishi/299023.html 转载请保留说明!

上一篇:CSS实现: 水平居中 的几种方法(css水平居中和垂直居中怎么设置)

下一篇:织梦DEDECMS缓存文件时间长度的修改方法(将织梦dedecms转换到wordpress)

  • 喜马拉雅草稿箱在哪(喜马拉雅草稿箱的录音怎么分享到微信)

    喜马拉雅草稿箱在哪(喜马拉雅草稿箱的录音怎么分享到微信)

  • cdr文件用什么打开(cdr文件用什么打开 视频)

    cdr文件用什么打开(cdr文件用什么打开 视频)

  • iphone xr充电时间(苹果xr充点多长时间)

    iphone xr充电时间(苹果xr充点多长时间)

  • 苹果7扩容128g后遗症(iphone 7扩容128g多少钱)

    苹果7扩容128g后遗症(iphone 7扩容128g多少钱)

  • 怎么没有微信视频号(怎么没有微信视频号功能)

    怎么没有微信视频号(怎么没有微信视频号功能)

  • 别人发的红包没领删除了怎么办(别人发的红包没有领删了聊天记录怎么办)

    别人发的红包没领删除了怎么办(别人发的红包没有领删了聊天记录怎么办)

  • 为什么微信回应不了群公告(微信回消息为什么有声音)

    为什么微信回应不了群公告(微信回消息为什么有声音)

  • XR为啥不显示充电完成(苹果xr充电不显示图标怎么设置)

    XR为啥不显示充电完成(苹果xr充电不显示图标怎么设置)

  • 电脑激活了还能退吗(电脑激活了还能七天无理由吗)

    电脑激活了还能退吗(电脑激活了还能七天无理由吗)

  • 华为mate30双击放大怎么关闭(华为mate30如何关闭双击放大功能)

    华为mate30双击放大怎么关闭(华为mate30如何关闭双击放大功能)

  • 拉黑又移出能收到消息吗(拉黑又移出能收到信息吗)

    拉黑又移出能收到消息吗(拉黑又移出能收到信息吗)

  • 手机led屏幕和oled屏幕有什么区别(手机led屏幕和lcd屏幕哪个好)

    手机led屏幕和oled屏幕有什么区别(手机led屏幕和lcd屏幕哪个好)

  • 新手机有划痕正常吗(新手机有刮痕)

    新手机有划痕正常吗(新手机有刮痕)

  • 苹果id移除设备后别人手机会怎样(苹果id移除设备对方知道吗)

    苹果id移除设备后别人手机会怎样(苹果id移除设备对方知道吗)

  • 视频解码什么意思(视频解码什么意思呀)

    视频解码什么意思(视频解码什么意思呀)

  • 照片存在哪儿不占内存(照片存在哪儿不会丢失)

    照片存在哪儿不占内存(照片存在哪儿不会丢失)

  • opporeno2z录屏怎么没有声音(opporeno2手机录屏怎么录内部声音)

    opporeno2z录屏怎么没有声音(opporeno2手机录屏怎么录内部声音)

  • 苹果手机qq怎么换行打字(苹果手机qq怎么分身两个号)

    苹果手机qq怎么换行打字(苹果手机qq怎么分身两个号)

  • 快手作品发布时间怎么关(快手作品发布时间)

    快手作品发布时间怎么关(快手作品发布时间)

  • 微信分身和微信的区别(微信分身和微信双开是什么意思)

    微信分身和微信的区别(微信分身和微信双开是什么意思)

  • mackintosh hd是什么(mac中macintosh hd)

    mackintosh hd是什么(mac中macintosh hd)

  • 苹果kh是什么版本(苹果kh是什么版本能三网吗)

    苹果kh是什么版本(苹果kh是什么版本能三网吗)

  • Win11怎么快速加密硬盘?Win11加密硬盘方法(win11 zen3)

    Win11怎么快速加密硬盘?Win11加密硬盘方法(win11 zen3)

  • PHPCMS是用的TP框架吗?(phpcms技术)

    PHPCMS是用的TP框架吗?(phpcms技术)

  • DedeCms分类信息联动筛选,省级与地市分开联动(分类信息有哪些网站)

    DedeCms分类信息联动筛选,省级与地市分开联动(分类信息有哪些网站)

  • 劳务费发票可以抵扣进项税吗
  • 金税盘锁死日期16号几点
  • 建筑公司可以开机械租赁发票吗
  • 计提个人部分保险
  • 外贸企业的会计
  • 预付款保函履约保函
  • 税后利润补亏的会计分录怎么做
  • 销货清单和发票金额不一致
  • 一般纳税人提供非学历教育可以简易计税吗
  • 进项税抵扣需要做分录吗
  • 专票可以当普票用不抵扣吗
  • 鸿蒙系统桌面布局图片怎么设置
  • 民法典对知识产权的定义
  • 施工项目费用明细表模板
  • macbook做bim
  • 委托银行收款属于什么科目
  • 销售方红字发票账务处理
  • 莱奇沃思田园城市
  • 贷款核销对个人的影响
  • 项目中的问题
  • 退货可以吗
  • php远程下载图片
  • jquery获取值的几种方法
  • thinkphp6.0完全开发手册
  • phpcms默认密码
  • python2打包
  • 一张专票可以开几项
  • 普票退货需要开红字信息表吗
  • mysql用在哪些方面
  • 生产车间年终奖计入什么科目
  • 不抵扣发票可以转抵扣吗
  • sql server遇到的主要问题及解决方法
  • phpmyadmin密码修改
  • 小额收据入账规则最新
  • 公司车辆缴纳车船税
  • 以经营房产投资合营收固定收益如何开发票?
  • 结转以前年度成本分录怎么写
  • 出口退的税交附加税吗
  • 事业单位会计怎么做
  • 公司试驾车怎么开票
  • 与其他企业联合投资一个项目要怎么做账务处理?
  • 原料到产品
  • 水电费收据能证明什么??
  • 其他综合收益转出
  • 营业收入怎么确定
  • 在建工程的人工费会计分录
  • 流量对比
  • 对于资产负债表日后的非调整事项
  • 进口车购置税多少个点
  • 财务大写金额书写样板
  • 零售商品储存的核算包括[ ]
  • sql server中触发器的作用是什么?
  • sqlserver触发器语法
  • mysql数据库视频
  • windows 开始
  • win7怎么操作
  • mac截图清晰度设置方法
  • windows7没有声音怎么调
  • 进去界面黑屏
  • centos sh
  • 无法打开文件exe
  • win10大更新2020
  • linux+c
  • win10 自带
  • windos10正式版
  • extjs grid设置某列背景颜色和字体颜色的实现方法
  • linux文本操作命令
  • js实现apply函数
  • python递归函数详解
  • 安卓无法更新软件
  • 简述javascript中的函数
  • android清理软件评测
  • Android 自定义view炫酷动画
  • 山东省地税局电话号码
  • 1992年2月20号是什么
  • 成都税务局网站首页
  • 镇江市税务局官网
  • 放管服中的服的深层含义
  • 文件印发的格式怎么设置
  • 城镇土地使用税税率
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设