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

相关推荐
结衣结衣.4 分钟前
python中的函数介绍
java·c语言·开发语言·前端·笔记·python·学习
全栈技术负责人5 分钟前
前端提升方向
前端
赵锦川5 分钟前
css三角形:css画箭头向下的三角形
前端·css
茫茫人海一粒沙7 分钟前
Python 代码编写规范
开发语言·python
原野心存7 分钟前
java基础进阶知识点汇总(1)
java·开发语言
程序猿阿伟9 分钟前
《C++高效图形用户界面(GUI)开发:探索与实践》
开发语言·c++
qbbmnnnnnn10 分钟前
【WebGis开发 - Cesium】如何确保Cesium场景加载完毕
前端·javascript·vue.js·gis·cesium·webgis·三维可视化开发
暗恋 懒羊羊18 分钟前
Linux 生产者消费者模型
linux·开发语言·ubuntu
五味香34 分钟前
C++学习,信号处理
android·c语言·开发语言·c++·学习·算法·信号处理