axios 取消请求 版本是1.7.5

news/2024/11/2 21:28:13/

从 v0.22.0 开始,Axios 支持 AbortController 以 fetch API 的方式取消请求

官方例子
const controller = new AbortController();axios.get('/foo/bar', {signal: controller.signal
}).then(function(response) {//...
});
// cancel the request
controller.abort()
request.jsimport axios from 'axios'
import { ElNotification, ElMessageBox, ElMessage, ElLoading } from 'element-plus'const errorCode = {'401': '认证失败,无法访问系统资源','403': '当前操作没有权限','404': '访问资源不存在','default': '系统未知错误,请反馈给管理员'
}axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
// 创建axios实例
const service = axios.create({// 超时timeout: 10000
})
// 声明缓存请求的集合const pendingRequest = new Map();
//  基于请求的url和method 生成请求keyconst generateRequestKey = (config) => {const { method,url } = config;return [ method,url ].join('&')}// 缓存正在penging的请求const addPendingRequest = (config)=>{const requestKey = generateRequestKey(config);if(pendingRequest.has(requestKey)){const controller = pendingRequest.get(requestKey);controller.abort()pendingRequest.delete(requestKey);}const controller = new AbortController();config.signal = controller.signal;pendingRequest.set(requestKey,controller)}// 删除请求集合const removePendingRequest = (config)=>{const requestKey = generateRequestKey(config);if(pendingRequest.has(requestKey)){pendingRequest.delete(requestKey);}}
// request拦截器
service.interceptors.request.use(config => {// 是否需要设置 tokenaddPendingRequest(config)return config
}, error => {console.log(error)Promise.reject(error)
})// 响应拦截器
service.interceptors.response.use(res => {removePendingRequest(res.config)// 未设置状态码则默认成功状态const code = res.data.code || 200;// 获取错误信息const msg = errorCode[code] || res.data.message || errorCode['default']if (code == 401) {return Promise.reject('无效的会话,或者会话已过期,请重新登录。')} else if (code == 500) {ElMessage({ message: msg, type: 'error' })return Promise.reject(new Error(msg))} else if (code == 601) {ElMessage({ message: msg, type: 'warning' })return Promise.reject(new Error(msg))} else if (code != 200) {ElNotification.error({ title: msg })return Promise.reject('error')} else {return Promise.resolve(res.data)}
},error => {console.log('err' + error)let { message } = error;if (message == "Network Error") {message = "后端接口连接异常";} else if (message.includes("timeout")) {message = "系统接口请求超时";} else if (message.includes("Request failed with status code")) {message = "系统接口" + message.substr(message.length - 3) + "异常";}ElMessage({ message: message, type: 'error', duration: 5 * 1000 })return Promise.reject(error)}
)export default service
调用<script setup>
import { getList } from '@/api/requestApi'const getListFn = () => {getList().then(res => {console.log(res)})
}
</script><template><div class="index">index<button @click="getListFn">getList</button></div>
</template><style lang="scss" scoped></style>

效果

在这里插入图片描述
在这里插入图片描述
只有最后一个 能正常请求


http://www.ppmy.cn/news/1543978.html

相关文章

Docker Compose入门学习——下载、授权、创建文件、定义服务

Docker Compose入门学习 简介 一般操作Docker的过程是&#xff1a;DockerFile build run 进行手动操作&#xff0c;单个容器&#xff0c;如果假设有100个微服务&#xff0c;并行微服务之间还存在依赖关系。这个时候&#xff0c;就可以使用Docker Compose来轻松高效的管理容器…

vue3中跨层传递provide、inject

前置说明 在 Vue 3 中&#xff0c;provide 和 inject 是一对用于跨组件树传递数据的 API。它们允许你在祖先组件中使用 provide 提供数据或服务&#xff0c;然后在后代组件中使用 inject 来获取这些数据或服务。这种方式特别适用于跨多个层级的组件传递数据&#xff0c;而不需要…

React前端框架

React 是一个用于构建用户界面的 JavaScript 库&#xff0c;由 Facebook 开发和维护。React 采用组件化的开发方式&#xff0c;使得开发者可以构建可复用的 UI 组件&#xff0c;从而提高开发效率和代码的可维护性。 React 的基本概念 组件&#xff1a;React 的核心概念是组件…

R语言实现GWAS meta分析(1)

1、基于数据集的Meta分析 datafilenamec("data1.txt","data2.txt"), setwd(workdir) library(Metalgwas) a1 name1c() for(i in datafilename){ assign(paste("file",a,sep""),data.table::fread(paste(getwd(),"/","…

Windows 安全日志解析

1. Windows 登录类型 在基于 Windows 的计算机中&#xff0c;以多个登录类型之一处理所有身份验证&#xff0c;无论使用何种身份验证协议或身份验证程序。 类型2&#xff1a;交互式登录(Interactive) 所谓交互式登录就是指用户在计算机的控制台上进行的登录&#xff0c;也就…

git入门教程10:git性能优化

一、配置优化 使用SSH协议&#xff1a; 相比HTTP/HTTPS协议&#xff0c;SSH协议在网络传输中更高效&#xff0c;且支持更安全的认证方式。确保你的远程仓库URL使用的是SSH协议&#xff0c;例如&#xff1a;git clone gitgithub.com:username/repo.git。 调整Git缓冲区大小&…

《网络是怎样连接的》学习总结-第三章上

目录 3. 从网线到网络设备—探索集线器、交换机和路由器 3.1 信号在网线和集线器中传输 3.1.1 每个包都是独立传输的 3.1.2 防止网线中的衰减很重要 3.1.3 “双绞”是为了抑制噪声 3.1.4 集线器将信号发往所有线路 3.2 交换机的包转发操作 3.2.1 交换机根据地址表进行转…

大模型学习---Prompt 的编写和优化技巧

Prompt 的编写和优化技巧 在自然语言处理和语言模型的应用中&#xff0c;Prompt&#xff08;提示&#xff09;的编写和优化至关重要。一个好的 Prompt 可以引导语言模型生成更准确、有用的回答。以下是关于 Prompt 的编写和优化技巧&#xff0c;以及一些具体示例。 一、明确需…