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

相关推荐
冰封剑心6 小时前
MiniCPM-V-2_6 (4-bit 量化)使用
java·前端·数据库
q***42826 小时前
SpringCloudGateWay
android·前端·后端
爱泡脚的鸡腿6 小时前
uni-app D5 实战(小兔鲜)
前端
tomato_4046 小时前
本地系统、虚拟机、远程服务器三者之间的核心区别
前端
纵有疾風起6 小时前
C++——多态
开发语言·c++·经验分享·面试·开源
许商6 小时前
【stm32】【printf】
java·前端·stm32
JIngJaneIL7 小时前
智慧物业|物业管理|基于SprinBoot+vue的智慧物业管理系统(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·论文·智慧物业管理系统
爬坑的小白7 小时前
vue 2.0 路由跳转时新开tab
前端·javascript·vue.js
爬坑的小白7 小时前
vue x 状态管理
前端·javascript·vue.js
凌览7 小时前
一键去水印|5 款免费小红书解析工具推荐
前端·javascript·后端