You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

我的throttle节流函数未等待limit设定时长就执行的问题求助

问题原因
  • 调用throttle时第一个参数传入的是display("Hi"),该写法会直接执行display函数打印内容,而非将函数引用传入节流逻辑做判断控制,所以每次触发throttleDisplay都会立刻输出一次"Hi"。
  • 每次调用throttleDisplay都会生成全新的节流函数实例,每个实例的flag变量相互独立,无法共享节流状态,完全达不到节流效果。
修复方案

修改逻辑为提前创建唯一的节流函数实例,且给节流函数传入原始函数引用而非执行结果,修复后代码如下:

const display = (msg) => {
    console.log(msg);
}

const throttle = (func, limit) => {
    let flag = true;
    return function() {
        if(flag) {
            func.apply(this, arguments);
            flag = false;
            setTimeout(() => flag = true, limit);
        }
    }
}

// 提前创建唯一的节流函数实例,所有触发共享同一个状态
const throttledDisplay = throttle(display, 6000);

for(let i=1; i<=10; i++) {
    // 每次触发都调用同一个节流函数,传入参数"Hi"
    setTimeout(() => throttledDisplay("Hi"), i*1000);
}

修复后运行逻辑:10次触发分别在第1到10秒执行,按照6秒的节流间隔,最终只会在第1秒、第7秒各输出一次"Hi",符合预期。

内容的提问来源于stack exchange,提问作者myTest532 myTest532

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 14:18:03