【问题标题】:Lodash debounce doesn't work when called from setInterval从 setInterval 调用 Lodash debounce 不起作用
【发布时间】:2019-05-28 15:12:58
【问题描述】:

我试图从 setInterval 调用一个去抖函数,但由于某种原因它不起作用并且该函数没有调用,知道为什么吗?

const _ = require('lodash');

const debouncedFunction = _.debounce(() => console.log('test'), 4000);

setInterval(() => {
    console.log('tick');
    debouncedFunction();
}, 1000);

值得一提的是,如果我将 setInterval 替换为 setTimeout 就可以了

https://repl.it/@ShahafMango/CheeryKaleidoscopicOffice

【问题讨论】:

标签: javascript lodash setinterval debounce


【解决方案1】:

debounce包装函数的目的是延迟函数的执行,只要它被重复调用。 wait 参数说明在最后一次调用去抖动函数之后,在调用内部函数之前应该经过的时间。如果间隔每1000ms调用一次函数,等待时间为4000ms,则包装函数永远不会被调用。

将间隔更改为小于 1000 将调用该函数(并且可能会破坏使用 debounce 包装的最初目的):

const debouncedFunction = _.debounce(() => console.log('test'), 500);

setInterval(() => {
  console.log('tick');
  debouncedFunction();
}, 1000);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>

如果您想限制函数每 4000 毫秒工作一次,请改用 _.throttle()。无论调用多少次包装函数,Throttle 都会将内部函数的调用限制为每个等待时间一次。

const debouncedFunction = _.throttle(() => console.log('test'), 4000);

setInterval(() => {
  console.log('tick');
  debouncedFunction();
}, 1000);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>

【讨论】:

    猜你喜欢
    • 2018-05-28
    • 2019-04-02
    • 1970-01-01
    • 2014-08-09
    • 2019-09-01
    • 2017-04-02
    • 2019-04-08
    • 2016-01-30
    • 2019-11-09
    相关资源
    最近更新 更多