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

相关推荐
小小小小宇几秒前
git 大仓库拉取卡顿问题
前端
前端那点事2 分钟前
告别低级冗余!10个前端原生高阶技巧,让代码更优雅、性能更出众
前端·vue.js
hexu_blog3 分钟前
前端vue后端java如何实现证件照功能
前端·javascript·vue.js
豹哥学前端3 分钟前
前端 LocalStorage 实战:从入门到熟练,一篇就够了
前端·javascript·面试
用户40189933422843 分钟前
第 11 章 MCP 协议与集成
前端
知识分享小能手6 分钟前
R语言入门学习教程,从入门到精通,R语言获取数据 (8)
开发语言·学习·r语言
qq_452396236 分钟前
第十一篇:《性能压测基础:JMeter线程模型与压测策略设计》
java·开发语言·jmeter
ComputerInBook7 分钟前
C++ 关键字 constexpr 和 consteval 之注意事项
开发语言·c++·constexpr·consteval
Southern Wind12 分钟前
谷记账——一个 Vue 3 批次记账 App
前端·javascript·vue.js
澈20715 分钟前
二叉搜索树:高效增删查的秘诀
java·开发语言·算法