当前位置: 首页 > news >正文

防抖函数 debounce debouncePromise

普通函数版

/*** 函数防抖* @param fn* @param ms* @returns*/
export const debounce = (fn: Function, ms = 300) => {let timeoutId: ReturnType<typeof setTimeout>return function (this: any, ...args: any[]) {clearTimeout(timeoutId)timeoutId = setTimeout(() => {fn.apply(this, args)}, ms)}
}

如果用普通的 debounce 去防抖 promise 类型的异步函数,是获取不到返回值的。此时需要使用 Promise 版的防抖函数

Promise 版

/*** 防抖Promise* @param fn* @param delay* @returns*/
export function debouncePromise(fn: (...arg0: any[]) => Promise<unknown>, delay = 300) {let pendingPromise: ReturnType<typeof setTimeout>return function (...args: any[]) {if (pendingPromise) {clearTimeout(pendingPromise)}return new Promise((resolve, reject) => {pendingPromise = setTimeout(() => {fn(...args).then(resolve).catch(reject)}, delay)})}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 少走弯路,ESP32 读取Micro SD(TF)播放mp3的坑路历程。
  • ET6框架(七)Excel配置工具
  • 【C++标准模版库】模拟实现容器适配器:stack、queue、priority_queue(优先级队列)
  • 集成电路学习:什么是BLE低功耗蓝牙
  • [英语单词] feedback
  • 如何从零开始在 Vue 3 项目中引入 Element Plus
  • 逆波兰表达式求值
  • 安卓13 背光反向 亮度反向 android13 backlight reverse
  • ThinkPHP之入门讲解
  • 2024公立医院绩效考核进行中,契约锁电子签章助力电子病历评级
  • C语言入门基础知识(持续更新中)
  • Visual Basic 6.0教程/Visual Basic从入门到实践/Visual Basic学习视频教程
  • 【Qt】QLCDNumber | QProgressBar | QCalendarWidget
  • 高级java每日一道面试题-2024年8月30日-基础篇-你对泛型了解多少?
  • 【jvm】栈帧的内部结构
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • C++入门教程(10):for 语句
  • js操作时间(持续更新)
  • Laravel Mix运行时关于es2015报错解决方案
  • laravel 用artisan创建自己的模板
  • XForms - 更强大的Form
  • 从零搭建Koa2 Server
  • 从伪并行的 Python 多线程说起
  • 番外篇1:在Windows环境下安装JDK
  • 回流、重绘及其优化
  • 理解在java “”i=i++;”所发生的事情
  • 入门到放弃node系列之Hello Word篇
  • 三栏布局总结
  • 一道面试题引发的“血案”
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 译米田引理
  • kubernetes资源对象--ingress
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • (1)Hilt的基本概念和使用
  • (2024.6.23)最新版MAVEN的安装和配置教程(超详细)
  • (3)nginx 配置(nginx.conf)
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (STM32笔记)九、RCC时钟树与时钟 第一部分
  • (附源码)ssm高校实验室 毕业设计 800008
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (一)VirtualBox安装增强功能
  • (转)ORM
  • (转)拼包函数及网络封包的异常处理(含代码)
  • .net framework profiles /.net framework 配置
  • .Net6使用WebSocket与前端进行通信
  • .NET成年了,然后呢?
  • .NET未来路在何方?
  • .net中生成excel后调整宽度
  • @private @protected @public
  • @Responsebody与@RequestBody
  • @Tag和@Operation标签失效问题。SpringDoc 2.2.0(OpenApi 3)和Spring Boot 3.1.1集成
  • @zabbix数据库历史与趋势数据占用优化(mysql存储查询)
  • []常用AT命令解释()
  • [1181]linux两台服务器之间传输文件和文件夹