当前位置:首页 » 《随便一记》 » 正文

前端终止请求---axios终止请求

5 人参与  2024年04月11日 14:48  分类 : 《随便一记》  评论

点击全文阅读


1、AbortController(新版本)

​ 在axiso的0.22.0版本开始,需要使用浏览器原生的AbortController来终止请求,是目前推荐用的方法。当使用该方法终止请求时,如果对应请求已经被发送并且正在处理中,则会中止该请求;如果请求已经完成(即已经接收到完整的响应),则不会执行任何操作。

​ 我们想监听到终止请求的操作,并进行后续处理,有两种方法:① 使用AbortController提供的onabort事件,通过监听该事件,并绑定事件处理函数,在函数中进行后续处理。② 使用try…catch,终止请求之后,会触发catch,在catch中进行后续处理。如果同时使用onabort事件和try…catch,则会先触发onabort事件,再触发try…catch。

// 以vue项目中使用axios为例// 创建请求控制器 this.controller = new AbortController();console.log("初始声明的请求控制器------", this.controller);// 第一种方法:绑定事件处理程序this.controller.signal.addEventListener("abort", () => {   console.log("请求已终止,触发了onabort事件");   // 进行后续处理});// 第二种方法:try...catchtry {    // 发送文件上传请求    const res = await this.$axios.post(api.Upload, uploadData, {     timeout: 0, // 设置超时时间为 0/null 表示永不超时     signal: this.controller.signal, // 绑定取消请求的信号量});} catch (error) {    console.log("终止请求时catch的error---", error);    // 判断是否为取消上传    if (error.message == "canceled"){        // 进行后续处理    };}// 终止请求this.controller.abort();console.log("终止请求后的请求控制器------", this.controller);

执行结果:

在这里插入图片描述

注意:

每个AbortController可以同时取消多个请求,但是只能取消请求一次,一个AbortController在终止过请求之后,其控制是否终止请求的signal.aborted属性会从false,变为true,目前本人没找到恢复为false的方法,暂且认为是不可恢复的吧。如果后续请求还是绑定该请求控制器,则后续请求都会被提前终止,不会被发出。

​ 如果我们想要在终止请求之后,不影响后续请求的正常发出,且后续请求也是可以被终止的,那么需要在每次发出请求之前,都通过构造函数创建一个新的的 AbortController,每次请求绑定的都是新的AbortController,这样才能做到多次请求之间不干扰。

2、CancelToken(旧版本)

​ 在axiso的0.22.0之前的版本,需要使用取消令牌cancel token来终止请求,不过该API从0.22.0开始被弃用,目前已不建议再使用。当使用该方法终止请求时,如果对应请求已经被发送并且正在处理中,则会中止该请求;如果请求已经完成(即已经接收到完整的响应),则不会执行任何操作。

​ 该方法只能通过try…catch来监听取消请求操作,终止请求之后,会触发catch,在catch中进行后续处理。而且该方法在取消请求时,可以通过参数自定义catch的error中的message内容。

// 以vue项目中使用axios为例// 这个地方需要导入原生的axios 最好不要使用二次封装后的axiosimport axios from "axios";// 创建请求令牌this.source = axios.CancelToken.source();console.log("初始声明的请求令牌---", this.source);// 第二种方法:try...catchtry {    // 发送文件上传请求    const res = await this.$axios.post(api.Upload, uploadData, {     timeout: 0, // 设置超时时间为 0/null 表示永不超时     cancelToken: this.source.token, // 绑定取消请求的令牌});} catch (error) {    console.log("终止请求时catch的error---", error);    // 判断是否为取消上传    if (error.message == "自定义取消请求的message"){        // 进行后续处理    };}// 终止请求this.source.cancel("自定义取消请求的message");console.log("取消请求后的请求令牌---", this.source);

在这里插入图片描述

注意:

该方法与AbortController相同,都可以同时取消多个请求,但是只能取消请求一次,一个CancelToken在终止过请求之后,如果后续请求还是绑定该请求令牌,则后续请求都会被提前终止,不会被发出。

​ 同理,如果我们想要在终止请求之后,不影响后续请求的正常发出,且后续请求也是可以被终止的,那么需要在每次发出请求之前,都创建一个新的的 CancelToken,每次请求绑定的都是新的CancelToken,这样才能做到多次请求之间不干扰。

使用的请求的技术方案不同,取消的方式不同
fetch 取消

通过 AbortController 控制器取消

const controller = new AbortController();const signal = controller.signal;fetch("http://www.baidu.com", { signal })  .then((res) => {    console.log(res);  })  .catch((err) => {    console.log(err);  });controller.abort();

axios 也就是 xhr 的取消
方案 1
通过 CancelToken 类创建一个取消控制器

const CancelToken = axios.CancelToken;const source = CancelToken.source();axios  .get("http://www.baidu.com", {    cancelToken: source.token,  })  .catch(function (thrown) {    if (axios.isCancel(thrown)) {      console.log("Request canceled", thrown.message);    } else {      // 处理错误    }  });source.cancel("取消");

方案 2

通过 AbortController 控制器取消,如上文所提,axios最好0.22版本以上的

const controller = new AbortController();axios  .get("http://www.baidu.com", {    signal: controller.signal,  })  .catch(function (thrown) {    // 处理错误  });controller.abort("取消");

点击全文阅读


本文链接:http://m.zhangshiyu.com/post/93770.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 祖母寿宴,侯府冒牌嫡女被打脸了(沈屿安秦秀婉)阅读 -
  • 《雕花锦年,昭都旧梦》(裴辞鹤昭都)完结版小说全文免费阅读_最新热门小说《雕花锦年,昭都旧梦》(裴辞鹤昭都) -
  • 郊区41号(许洛竹王云云)完整版免费阅读_最新全本小说郊区41号(许洛竹王云云) -
  • 负我情深几许(白诗茵陆司宴)完结版小说阅读_最热门小说排行榜负我情深几许白诗茵陆司宴 -
  • 九胞胎孕妇赖上我萱萱蓉蓉免费阅读全文_免费小说在线看九胞胎孕妇赖上我萱萱蓉蓉 -
  • 为保白月光,侯爷拿我抵了债(谢景安花田)小说完结版_完结版小说全文免费阅读为保白月光,侯爷拿我抵了债谢景安花田 -
  • 陆望程映川上官硕《我的阿爹是带攻略系统的替身》最新章节阅读_(我的阿爹是带攻略系统的替身)全章节免费在线阅读陆望程映川上官硕
  • 郑雅琴魏旭明免费阅读_郑雅琴魏旭明小说全文阅读笔趣阁
  • 头条热门小说《乔书意贺宴临(乔书意贺宴临)》乔书意贺宴临(全集完整小说大结局)全文阅读笔趣阁
  • 完结好看小说跨年夜,老婆初恋送儿子故意出车祸_沈月柔林瀚枫完结的小说免费阅读推荐
  • 热推《郑雅琴魏旭明》郑雅琴魏旭明~小说全文阅读~完本【已完结】笔趣阁
  • 《你的遗憾与我无关》宋怀川冯洛洛无弹窗小说免费阅读_免费小说大全《你的遗憾与我无关》宋怀川冯洛洛 -

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1