首页 > 其他分享 >使用js闭包实现可取消的axios请求

使用js闭包实现可取消的axios请求

时间:2024-09-09 22:38:29浏览次数:1  
标签:闭包 axios return 请求 signal abortable js abort

在平常开发中,经常会遇到重复请求的情况,也许是因为网络问题,也许是因为接口问题等等,传统做法是客户端采用防抖来限制用户发送接口的频率,一般出个loading转圈圈的形式,

但是很少使用取消请求的做法,现在我来记录一下,如何采用闭包来封装一个可取消请求的函数,首先需要了解的是

1. 闭包

2. AbortController()

这里对上述不做赘述,直接上代码:

需要注意的是,AbortController构造函数返回的实例,所包含的abort函数是一次性的,也就是说一个abort实例只能对应一个xhr请求,只能使用一次abort.abort()

理解了这一点,那么我们就可以很容易的借助闭包来实现这样一个装饰器函数:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
  </head>
  <body>
    <button id="send">send request</button>

    <script>
      document.getElementById("send").addEventListener("click", () => {
        getListAbortable()
          .then((res) => {
            console.log("数据:", res);
          })
          .catch((e) => {
            console.log("请求错误:", e);
          });
      });

      function AbortRequest(callback) {
        let abortable = null;
        return function () {
          if (abortable) {
            abortable.abort();
          }
          abortable = new AbortController();
          return callback(abortable.signal);
        };
      }

      const getListAbortable = AbortRequest((signal) => {
        return axios.get("/slow", { signal });
      });
    </script>
  </body>
</html>

 当我快速点击按钮的时候,会自动取消上一次xhr请求,并发送下一次xhr请求,直到请求完成。

这样就实现啦!

标签:闭包,axios,return,请求,signal,abortable,js,abort
From: https://www.cnblogs.com/aursordev/p/18405492

相关文章

  • Vue.js 组件设计详解
    在现代Web开发中,组件化设计已经成为构建可维护和可扩展应用程序的关键策略之一。而Vue.js作为一个流行的前端框架,以其简单易用、灵活和高效的特点,成为开发者的首选之一。本文将详细介绍如何设计Vue组件,涵盖从基础到高级的概念和实践,包括组件的创建、通信、复用、优化和......
  • 实现一个基于 Spring Boot 和 Vue.js 的实时消息推送系统
    在现代互联网应用中,实时消息推送已经成为一个非常重要的功能。不论是即时通讯、通知系统,还是其他需要实时互动的应用场景,消息的实时性直接影响到用户的体验和应用的效率。在这篇文章中,我将详细介绍如何使用SpringBoot和Vue.js创建一个实时消息推送系统,并确保每个用户只......
  • 题解:P6089 [JSOI2015] 非诚勿扰
    分析首先我们要求出对于第\(i\)位女性,她选择每个列表中的男性的概率是多少。第一轮选择第一位的概率为\(p\),选择第二位的概率为\(p(1-p)\),以此类推。显然第一轮选择第\(k\)位的概率为\(p(1-p)^{k-1}\)。假设列表中有\(n\)名男性,那么第二轮选择第一位的概率为\(p(1-p......
  • JSP课程设计|基于Jsp和MySql实现的农场信息管理系统
    3.1基本开发环境配置根据上述要求,结合项目开发实际需要,我们将项目所需基本开发环境清单列出如下所示。操作系统:MicrosoftWindow10编程语言:Java编程IDE:JetBrains-IntellijIdeaUltimate服务器:Apache-Tomcat-9.0.6数据库:MySQL5.7.21CommunityServer由于这些环......
  • shell请求api,获取json返回值,做判断
    1.shell如何请求api,获取到json返回值:https://www.cnblogs.com/pingguomang/p/184050112.shell如果解析json数据: https://www.cnblogs.com/pingguomang/p/184049963.shell的条件判断:#定义用户的iduser_id="199348"#1.调用api--获取用户数据详细信息response=$(curl......
  • SQL SERVER -- JSON处理
    --JSON 字符串转 行记录Declare@JsonStrNvarchar(Max)='[{"State":0,"Name":"语文","ReMark":"了解国学信息","RepDtl":[{"ID":1,"Age":11},{"ID":2,"Age":12},{"ID&quo......
  • 基于Node.js+vue基于vue的大学生兼职信息平台(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着高等教育的普及和就业市场的日益竞争,大学生在校期间寻找兼职工作已成为常态。然而,传统的兼职信息获取方式,如校园海报、社交媒体零散信息等,存在信息分散......
  • 计算机毕业设计nodejs+vue+express高校学生摄影社团管理系统 2ix7i
    目录技术栈具体实现截图系统设计解决的思路nodejs类核心代码部分展示可行性论证研究方法操作可行性源码获取技术栈该系统将采用B/S结构模式,开发软件有很多种可以用,本次开发用到的软件是vscode,用到的数据库是MySQL,为了更加便捷地使用数据库,用到了MySQL的可视化工具SQ......
  • Vue3、Vue2、js通用下载不同文件的几种方式
    示例在Vue中需要实现文件下载功能时,我们可以有多种方式来完成。下面将介绍五种常用的方法。1.使用window.open方法下载文件<template><div><button@click="downloadFile('file1.pdf')">下载文件1</button><button@click="downloadFile('file2.jpg'......
  • js实现滑动密码框
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content="width=device-width,......