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

相关推荐
勤奋菲菲3 分钟前
Vue3+Three.js:requestAnimationFrame的详细介绍
开发语言·javascript·three.js·前端可视化
洋不写bug11 分钟前
前端环境搭建,保姆式教学
前端
要天天开心啊18 分钟前
Java序列化和反序列化
java·开发语言
需要兼职养活自己23 分钟前
react高阶组件
前端·react.js
TechFrank30 分钟前
Shadcn/ui 重磅更新:7 个实用新组件深度解析与实战指南
前端
二宝15236 分钟前
黑马商城day1-MyBatis-Plus
java·开发语言·mybatis
快乐是一切38 分钟前
PDF中的图像与外部对象
前端
前端开发呀44 分钟前
无所不能的uniapp拦截器【三】uni-app 拦截器核心流程解析
前端·javascript·微信小程序
云枫晖1 小时前
破壁前行:深度解析前端跨域的本质与实战
前端·浏览器
Porunarufu1 小时前
JAVA·类和对象③封装及包
java·开发语言