lodash中flush的使用(debounce、throttle)

在项目的配置中,看到了一个请求,类似是这样的

javascript 复制代码
import { throttle } from 'lodash-es'

// 请求函数
async function someFetch(){
     const {data} = await xxx.post()
    return data
}

// 节流函数
async function throttleFn(someFetch,1000)


// 执行拿到数据函数
async function getDataFn(enforcement){
    return enforcement? await throttleFn.flush() : await throttleFn()
}

逻辑很简单,因为有个节流函数1秒执行一次,所以接收了一个 enforcement 作为参数来让节流函数失效,让请求再强制执行一次。

但你会发现,执行 getDataFn(true),请求函数 someFetch.flush() 并没有去发送请求,而直接执行getDataFn(),则可以发送请求。

原因如下:

someFetch.flush() 只会在 someFetch()执行的过程中去执行,单独执行someFetch.flush()是不会发送请求的,或许可以考虑改用以下这种写法

javascript 复制代码
// 执行拿到数据函数
async function getDataFn(enforcement){
    if(enforcement){
        return ((await throttleFn()) && (await throttleFn.flush()))
    }

    return await throttleFn()
}

总结:在使用debounce 和 throttle 的时候使用flush()强制执行时,确保节流和防抖接受的函数正在执行过程中,flush()才会生效

相关推荐
丷丩5 分钟前
MapLibre GL JS第41课:向地图添加图标
前端·javascript·mapbox·maplibre gl js
英俊潇洒美少年10 分钟前
前端性能优化:非关键脚本/第三方资源异步加载全解(彻底解决首屏阻塞)
前端·性能优化
Jun62614 分钟前
QT(2)-通过管道关联CMD
开发语言·qt·命令模式
掘金者阿豪31 分钟前
终于!我的第二本书正式出版,吃透 Agentic AI 核心不踩坑
javascript·后端
开飞机的舒克_35 分钟前
vue3+router动态权限路由
前端·vue.js
VitoChang35 分钟前
放弃手搓路由吧!用 SolidStart 搞 SPA,真香
前端
GuWenyue36 分钟前
告别JS类型坑!Ts为什么在ai时代逐渐成为"第一"语言
前端·算法·typescript
三乐22838 分钟前
事件循环是什么东西,一篇文章带你了解
前端·javascript
wuhen_n39 分钟前
RAG 核心:向量嵌入与本地向量数据库实战
前端·langchain·ai编程
孟陬41 分钟前
国外技术周刊 #139:LLM 正在杀死程序员的「懒惰美德」
前端·人工智能·后端