【发布时间】:2018-04-23 05:17:12
【问题描述】:
如果我有一个函数foo。它在短时间内接到许多电话。
function foo(name) {
console.log(`Hi ${name}, it is now: `, new Date());
}
使用 lodash 延迟连续的函数调用(去抖动)可以正常工作。
const debouncedFoo = _.debounce(foo, 1000 );
但是,我的目标是即使超时 (1000) 已过也不执行这整个调用队列,并考虑 仅 最后一次调用 被执行.
换句话说,如果我在 900 毫秒内调用了 debouncedFoo 5 次(小于“等待参数”1000 毫秒),我希望 foo 只执行一次,这是最后一次 (5ᵗʰ) 调用。
阅读 lodash 文档,我了解到 debounce 被选项的 3ʳᵈ 参数重载。我使用了它们,但没有发生预期的行为:
// first attempt
const debouncedFoo = _.debounce(foo, 1000, {leading: true} );
// second attempt
const debouncedFoo = _.debounce(foo, 1000, {trailing: false} );
【问题讨论】:
-
那不是你想要的吗? lodash.com/docs/#throttle
-
已经有一段时间了,但是对于其他任何人(比如我)来说,偶然发现了这一点 - 有时可以忽略的事情是在每次状态更改时意外地重新创建 debounced 函数。
-
光荣的评论@AndyO。在我的情况下确实如此 - 我在反应组件中使用 debounce。重新渲染创建了多个去抖动实例。通过将功能移出组件来修复。你救世主✌️????
标签: javascript debouncing