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()才会生效

相关推荐
Fairy要carry1 分钟前
项目01-手搓Agent之loop
前端·javascript·python
亲亲小宝宝鸭6 分钟前
Ctrl ACV工程师的提效之路:删掉项目中的冗余
前端
kyriewen9 分钟前
DOM树与节点操作:用JS给网页“动手术”
前端·javascript·面试
米饭同学i12 分钟前
基于腾讯云COS的小程序素材上传功能实现
前端·javascript·react.js
cxxcode13 分钟前
前端性能指标接入 Prometheus 技术方案
前端
辣椒炒代码13 分钟前
🚀 AI Agent 入门实战:基于 LangChain + MCP 构建智能导游助手
前端
郝学胜-神的一滴15 分钟前
【技术实战】500G单行大文件读取难题破解!生成器+自定义函数最优方案解析
开发语言·python·程序人生·面试
ruanCat18 分钟前
前端工程化工具链从零配置:simple-git-hooks + lint-staged + commitlint
前端·git·代码规范
愤豆19 分钟前
02-Java语言核心-语法特性-注解体系详解
java·开发语言·python
光影少年20 分钟前
如何开发一个CLI工具?
javascript·测试工具·前端框架·node.js