前端 按钮 loading效果阻断不了快速点击,执行防抖操作进行阻断接口连续调用

news/2024/11/17 6:38:20/

需求描述:
页面中执行了按钮的连续点击操作,虽然前端在按钮中加了loading效果,但是发现,如果点击速度很快,那么loading效果来不及赋值并执行,此时就会出现连续的接口调用造成数据保存或流程数据出现错误或重复数据新增。
此时用防抖解决。

封装如下:

import { request as iceRequest } from 'ice';
import _ from 'lodash';function debounceAsync(func, wait) {let timeout;return async function (...args) {clearTimeout(timeout);return new Promise((resolve) => {timeout = setTimeout(async () => {const result = await func(...args);resolve(result);}, wait);});};
}const request = (url: string, option) => {if (option.method) {if (option.method.toUpperCase() === 'GET' && option.query) {option.params = option.query;}if (['POST', 'PUT', 'DELETE', 'PATCH'].includes(option.method.toUpperCase()) && option.query) {option.data = option.query;}}return iceRequest({url,...option,});
};const debounceRequestFn = (url: string, option, delay = 500) => {if (option.method) {if (option.method.toUpperCase() === 'GET' && option.query) {option.params = option.query;}if (['POST', 'PUT', 'DELETE', 'PATCH'].includes(option.method.toUpperCase()) && option.query) {option.data = option.query;}}return iceRequest({url,...option,});
};export default request;const debounceRequest = debounceAsync(async function (url: string, option, delay = 500) {const response = await debounceRequestFn(url, option, delay);return response
}, 300)export {debounceRequest
}

然后 在页面中引用方法即可

import request from '@/utils/request';
import debounceRequest from '@/utils/request';

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

相关文章

ABAP WS_DELIVERY_UPDATE 报错 BS013

在使用 WS_DELIVERY_UPDATE 创建内向交货单时 报错:System status ESTO is active (EQU ***) 可以用事务代码IE03--->历史去看下 你可以手动将它的状态去改回EDEL 或者 SLOR IE02--> Special serial no. functions --> Manual transaction.

0017Java程序设计-spr农业过程化管理系统

摘 要目 录系统设计开发环境 摘 要 本农业过程化管理系统就是建立在充分利用现在完善科技技术这个理念基础之上,并使用IT技术进行对农业过程化的管理,从而保证种植户能种植出优质的农作物,可以实现农业过程化的在线管理,这样保证…

Vue2面试题100问

Vue2面试题100问 Vue2面试题100问1.简述一下你对Vue的理解2.声明式和命令式编程概念的理解3.Vue 有哪些基本特征4.vue之防止页面加载时看到花括号解决方案有哪几种?5.Vue中v-for与v-if能否一起使用?6.vue中v-if与v-show的区别以及使用场景7.v-on可以监听…

无涯教程-JavaScript - IMDIV函数

描述 IMDIV函数以x yi或x yj文本格式返回两个复数的商。 $$IMDIV(z1,z2) \frac {(a bi)} {(c in)} \frac {{ac bd)(bc-ad)i} {c ^ 2 d ^ 2 } $$ 语法 IMDIV (inumber1, inumber2)争论 Argument描述Required/OptionalInumber1The complex numerator or dividend.Req…

代码随想录算法训练营Day56 || ● 583. 两个字符串的删除操作 ● 72. 编辑距离

今天接触到了真正的距离,但可以通过增删改操作来逼近。 问题1:583. 两个字符串的删除操作 - 力扣(LeetCode) 给定两个单词 word1 和 word2 ,返回使得 word1 和 word2 相同所需的最小步数。 每步 可以删除任意一个字…

统计学习方法 | 感知机

python代码实现 import numpy as np import matplotlib.pyplot as plt plt.rcParams[font.sans-serif][SimHei] plt.rcParams[axes.unicode_minus]False建立感知机模型(原始形式) def PM(X,Y):#设置感知机模型w和b、h(学习率)的初值wnp.array([[0,0]])b0h1#迭代,更…

数据库顶会 VLDB 2023 论文解读:字节跳动如何解决超大规模流式任务运维难题

本文解读了新加坡国立大学马天白教授团队、字节跳动基础架构-计算-流式计算团队联合发表在国际数据库与数据管理顶级会议 VLDB 2023 上的论文“StreamOps: Cloud-Native Runtime Management for Streaming Services in ByteDance”,介绍字节跳动内部基于数万 Flink …

初始化一个Gin框架的Go-Web项目

使用到的第三方库 gin Gin 框架viper 配置文件管理cors 跨域资源请求配置gorm ORM 库zap 日志记录 main 包 Go 语言程序的入口点 main.go 文件 使用 flag 读取配置文件路径参数,默认当前目录下使用 viper 读取 config.ini 配置文件初始化初始数据初始化随机数种子初…