场景

        在页面中,可能会因为某些操作多次触发某个请求,如多次点击某按钮触发请求,实际上我们只需要最后一次请求的返回值,但是由于请求的耗时不一,请求未必会按发送的顺序返回,导致我们最终获取到的值 ≠ 最后一次发送请求的返回值

根据项目经验,目前一共尝试过两种方法

1. 设置请求的唯一 id 

2. 使用 axios 官方方法:AbortController

解决

1. 设置请求的唯一 id

        为每个请求设置一个唯一 id,每触发一次请求,id+1,多次触发请求后,取值时根据请求 id 值来对应取值。

使用示例如下:

// 设置请求id初始值为0
sessionStorage.setItem('id', JSON.stringify(0))
/*** 发送请求* @param data 请求参数*/
function query(data) {loading.value = true// priceId加1,并存储在session里const priceId = JSON.parse(sessionStorage.getItem('id')) + 1sessionStorage.setItem('id', JSON.stringify(priceId))queryApi(data).then(res => {// 根据session中的priceId, 取最后一次请求的返回值if (priceId === JSON.parse(sessionStorage.getItem('id'))) {// 处理业务逻辑const { resultData } = res}}).catch(err => {// 业务处理逻辑}).finally(() => {loading.value = false})
}const url = '/query/abc'
function queryApi(paramsObj) {return httpInstance.post(url, paramsObj)
}

2. AbortController方法

        AbortController 是 axios 官方提供的取消请求的 api,使用时注意:

        1. 该 api 仅在 Axios 版本>=V0.22.0 时生效。

        2. Axios 版本<V0.22.0 时请使用 CancelToken

        3. 允许取消一个或多个正在进行的请求,但如果请求已经成功响应则不能取消。

官网文档链接:取消请求 | Axios中文文档 | Axios中文网

使用示例如下:

// 用于存储当前的 AbortController 实例
let currentController = null
/*** 发送请求* @param data 请求参数*/
function query(data) {loading.value = true// 取消之前的请求if (currentController) {currentController.abort()currentController = null}const controller = new AbortController()currentController = controller //重置AbortControllerqueryApi(data, controller.signal).then(res => {const { resultData } = res// 业务处理逻辑.....loading.value = false}).catch(err => {if (err.name === 'CanceledError') {console.log('请求被取消', err.message)} else {console.error('请求失败', err)loading.value = false}})
}const url = '/query/abc'
function queryApi(paramsObj, signal) {return httpInstance.post(url, paramsObj, {signal: signal})
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/86193.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/86193.shtml
英文地址,请注明出处:http://en.pswp.cn/web/86193.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JSON框架转化isSuccess()为sucess字段

在您的描述中&#xff0c;BankInfoVO子类返回的JSON中出现了"success": true字段&#xff0c;但类本身没有定义这个字段。这通常是由以下原因之一造成的&#xff1a; 原因分析及解决方案 序列化框架的Getter自动推导 Java序列化框架&#xff08;如Jackson/Gson&…

Ragflow 源码:task_executor.py

目录 介绍主要功能核心组件 流程图核心代码解释1. 系统架构与核心组件2. 核心处理流程3. 高级处理能力4. 关键创新点5. 容错与监控机制6. 性能优化技巧 介绍 task_executor.py 是RAGFlow系统中的任务执行器(Task Executor)核心部分&#xff0c;主要负责文档的解析、分块(chunk…

创客匠人联盟生态:重构家庭教育知识变现的底层逻辑

在《家庭教育促进法》推动行业刚需化的背景下&#xff0c;单一个体 IP 的增长天花板日益明显。创客匠人提出的 “联盟生态思维”&#xff0c;正推动家庭教育行业从 “单打独斗” 转向 “矩阵作战”&#xff0c;其核心在于通过工具整合资源&#xff0c;将 “同行竞争” 转化为 “…

【Docker基础】Docker容器管理:docker stop详解

目录 1 Docker容器生命周期概述 2 docker stop命令深度解析 2.1 命令基本语法 2.2 命令执行流程 2.3 stop与kill的区别 3 docker stop的工作原理 3.1 工作流程 3.2 详细工作流程 3.3 信号处理机制 4 docker stop的使用场景与最佳实践 4.1 典型使用场景 场景1&#…

rules写成动态

拖拽排序和必填校验联动(rules写到computed里) computed: {rules() {const rules {};this.form.feedList.forEach((item, idx) > {rules[feedList.${idx}] [{ required: true, message: 路线评价动态${idx 1}待填写&#xff0c;请填写完毕提交, trigger: change }];});re…

The Open Group开放流程自动化™ 论坛(OPAF)发布组织最新进展报告

除埃克森美孚&#xff08;ExxonMobil&#xff09;的成就外&#xff0c;开放流程自动化™ 论坛&#xff08;OPAF&#xff09;的最新论坛报告显示&#xff0c;该组织其他成员也在多个领域取得进展。 “我们祝贺埃克森美孚&#xff0c;因为他们证明了在前线、创收的工艺操作中部署…

线程的基本控制

线程终止 exit是危险的 如果进程中的任意一个线程调用了exit&#xff0c;那么整个进程终止。 不终止进程的退出方式 普通单个线程的退出方法&#xff0c;以下方法退出不会导致进程终止&#xff1a; &#xff08;1&#xff09;从启动例程中返回&#xff0c;返回值是线程的退出…

DeepSeek+WinForm串口通讯实战

前言 在现代软件开发中&#xff0c;串口通讯仍然是工业自动化、物联网设备和嵌入式系统的重要通信方式。随着.NET技术的发展&#xff0c;特别是.NET 5/.NET 6的跨平台能力&#xff0c;传统的WinForm应用现在可以通过现代UI框架实现真正的跨平台串口通讯。本文将深入探讨三种主…

针对数据仓库方向的大数据算法工程师面试经验总结

⚙️ 一、技术核心考察点 数据建模能力 星型 vs 雪花模型&#xff1a;面试官常要求对比两种模型。星型模型&#xff08;事实表冗余维度表&#xff09;查询性能高但存储冗余&#xff1b;雪花模型&#xff08;规范化维度表&#xff09;减少冗余但增加JOIN复杂度。需结合场景选择&…

Nuxt3 Cannot read properties of undefined (reading ‘createElement‘)

你遇到的 TypeError: Cannot read properties of undefined (reading createElement) 这个报错&#xff0c;通常是由于在 Nuxt3 或 Vue3 项目中&#xff0c;某些地方尝试访问 document.createElement 或类似 DOM API&#xff0c;但此时 document 还未定义&#xff08;比如在服务…

正则表达式匹配实现

直接上代码 using Microsoft.AspNetCore.Mvc; using System.Text.RegularExpressions;namespace SaaS.OfficialWebSite.Web.Controllers {public class RegController : Controller{public IActionResult Index(){return View();}[HttpPost]public IActionResult TestRegex([F…

API测试工具Parasoft SOAtest:应对API变化,优化测试执行

API频繁变更给测试工作带来诸多挑战&#xff0c;如手动排查变更影响耗时费力、测试用例维护繁琐易出错等。Parasoft SOAtest作为一款企业级API测试工具&#xff0c;通过自动扫描API接口、智能分析变更影响、优化测试&#xff0c;执行以及支持测试用例共享与版本控制等功能&…

mysql 数据库连接 -h localhost 和 -h 127.0.0.1 区别是什么

对于 mysql 数据库&#xff0c; 在 my.conf 中指定的client 端口是 3358&#xff0c;实际的mysql server 的端口监听在 3306&#xff0c; mysql -h localhost 可以居然可以连接成功&#xff1b; mysql -h 127.0.0.1 连接失败提示Can’t connect to MySQL server on 127.0.0.1&a…

Educational Codeforces Round 180 (Rated for Div. 2) A-D

A.Race 题目大意 给你两个x,y&#xff0c;终点会在二点之间随机出现,alice在点a&#xff0c;假设alice和bob有相同的速度&#xff08;距离更短者用时更少&#xff09;&#xff0c;问对于bob是否存在一点&#xff0c;无论终点是x还是y,他都能比alice更快到达 思路 如果alice在…

python requests post请求

在Python中&#xff0c;使用requests库进行POST请求是一种常见的操作&#xff0c;用于向服务器发送数据。下面是如何使用requests库进行POST请求的步骤&#xff1a; 安装requests库 如果你还没有安装requests库&#xff0c;可以通过pip安装&#xff1a; pip install requests…

Postman中设置定时自动运行接口测试

‌创建测试集合‌ 将需每日运行的接口组织到Collection中&#xff0c;并配置好测试脚本和断言。 ‌配置定时运行‌ 打开目标Collection → 点击 ‌Run‌ 按钮在Collection Runner页面底部选择 ‌Schedule runs‌关键配置&#xff1a; Frequency: Daily // 选择每日执行 Time…

multiprocessing.pool和multiprocessing.Process

在CPU密集型任务中&#xff0c;Python的multiprocessing模块是突破GIL限制的关键工具。multiprocessing.Pool&#xff08;进程池&#xff09;和multiprocessing.Process&#xff08;独立进程&#xff09;是最常用的两种并行化方案&#xff0c;但其设计思想和适用场景截然不同。…

容器技术技术入门与 Docker 环境部署

目录 一&#xff1a;Docker概述 1、 Docker的优势&#xff1a; &#xff08;1&#xff09;环境一致性 &#xff08;2&#xff09;隔离性 &#xff08;3&#xff09;资源高效 &#xff08;4&#xff09;便捷性和可扩展性 2、Docker容器与传统虚拟机的区别 3、Docker的应用…

Oracle获取执行计划之DBMS_XPLAN 技术详解1

在 Oracle 数据库的管理与优化工作中&#xff0c;深入了解 SQL 语句的执行计划是至关重要的一环。DBMS_XPLAN 包作为 Oracle 提供的强大工具&#xff0c;能够帮助数据库管理员&#xff08;DBAs&#xff09;和开发人员清晰地查看和分析 SQL 语句的执行计划&#xff0c;从而实现对…

【Python】VScode配置Python教程

文章目录 【Python】VScode配置Python教程下载Python安装插件解决乱码彻底运行vscode安装python库 【Python】VScode配置Python教程 前言&#xff1a; 当「Python 编程潜力」遇上「VSCode 开发神器」&#xff0c;会点燃怎样的效率革命&#xff1f;试想这样的场景&#xff1a;你…