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 分钟前
SSM框架从入门到入土(AOP面向切面编程)
java·开发语言
铅笔侠_小龙虾6 分钟前
Flutter 实战: 计算器
开发语言·javascript·flutter
2的n次方_24 分钟前
Runtime 执行提交机制:NPU 硬件队列的管理与任务原子化下发
c语言·开发语言
大模型玩家七七26 分钟前
梯度累积真的省显存吗?它换走的是什么成本
java·javascript·数据库·人工智能·深度学习
. . . . .34 分钟前
shadcn组件库
前端
2501_9447114342 分钟前
JS 对象遍历全解析
开发语言·前端·javascript
凡人叶枫1 小时前
C++中智能指针详解(Linux实战版)| 彻底解决内存泄漏,新手也能吃透
java·linux·c语言·开发语言·c++·嵌入式开发
Tony Bai1 小时前
再见,丑陋的 container/heap!Go 泛型堆 heap/v2 提案解析
开发语言·后端·golang
发现一只大呆瓜1 小时前
虚拟列表:支持“向上加载”的历史消息(Vue 3 & React 双版本)
前端·javascript·面试
小糯米6011 小时前
C++顺序表和vector
开发语言·c++·算法