Vue3实战笔记(10)—再次封装扩展AXIOS-拦截重复请求

文章目录


前言

对已经封装好了的工具类整体再加一层封装添加一些功能,便于灵活应用。例如增加防止重复点击功能,缓存功能等等。


一、封装shrequest.ts

新建shrequest.ts:

javascript 复制代码
import shaxios from '@/utils/shaxios'

let sh_req = (function () {
    let repeatUrl:Array<string> = [] //重复请求
    debugger
    return function(config?:any){
        debugger
        let url = config.url
        if(repeatUrl.indexOf(url) > -1){//如果有重复的url
            // return Promise.reject(new Error("请不要重复提交!"))   
            return Promise.reject({message:"请不要重复提交!"})
        }
        //如果没有重复请求就存入重复请求数组再发送请求,如果下次请求来了,成功之前没有清除数组就会认为是重复提交
        repeatUrl.push(url)
        //发送请求,成功后清除url
        return shaxios({
            ...config //扩展运算符的使用
        }).then((res:any)=>{
            repeatUrl = repeatUrl.filter((repUrl)=>{ //请求已经成功,删除数组中用于判断重复url的值
                return repUrl !== url
            })

            return res
        })
    }
})() //闭包,括号中用于传参(闭包作用?)

export {
    shaxios as shrequest, //导出原shaxios供使用
    sh_req //导出新封装了重复提交功能的新sh_req
}

二、使用步骤

代码如下(示例):

javascript 复制代码
import {sh_req,shrequest} from '@/utils/shrequest'

//注意由于定制拦截传参限制了config,sh_req只支持这种方式调用了
sh_req({
  method:"get",
  url:"/hellosh",
}).then((response: any)=>{
    console.log(response)
})

总结

在软件开发中,对已经封装好的工具类进行进一步的封装并添加新的功能是一种常见的设计模式。这种做法通常用于扩展现有工具类的功能、增强其灵活性或使其更加易于使用。建议配合前面文章结合实践。

相关推荐
鱼毓屿御10 分钟前
如何给用户添加权限
前端·javascript·vue.js
JustHappy13 分钟前
「web extensions🛠️」有关浏览器扩展,开发前你需要知道一些......
前端·javascript·开源
智者知已应修善业21 分钟前
【洛谷P9975奶牛被病毒传染最少数量推导,导出多样例】2025-2-26
c语言·c++·经验分享·笔记·算法·推荐算法
何中应21 分钟前
nvm安装使用
前端·node.js·开发工具
xixixin_22 分钟前
【JavaScript 】从 || 到??:JavaScript 空值处理的最佳实践升级
开发语言·javascript·ecmascript
Java新手村22 分钟前
基于 Vue 3 + Spring Boot 3 的 AI 面试辅助系统:实时语音识别 + 大模型智能回答
vue.js·人工智能·spring boot
雯0609~28 分钟前
hiprint:实现项目部署与打印3-vue版本-独立出模板设计与模板打印页面
前端·vue.js·arcgis
Junlan2731 分钟前
Cursor使用入门及连接服务器方法(更新中)
服务器·人工智能·笔记
杜子不疼.33 分钟前
【Linux】教你在 Linux 上搭建 Web 服务器,步骤清晰无门槛
linux·服务器·前端
belldeep36 分钟前
python:用 Flask 3 , mistune 2 和 mermaid.min.js 10.9 来实现 Markdown 中 mermaid 图表的渲染
javascript·python·flask