从setInterval调用时,Lodash的反跳功能不起作用

时间:2019-05-28 15:12:58

标签: javascript lodash setinterval debounce

我正在尝试从setInterval调用一个去抖动的函数,但是由于某种原因它不起作用并且该函数无法调用,所以知道为什么吗?

const _ = require('lodash');

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

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

值得一提的是,如果我将setInterval替换为setTimeout,那么它将起作用

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

1 个答案:

答案 0 :(得分:1)

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

将间隔更改为小于1000的值将调用该函数(并且可能破坏了用去抖动包装的原始目的):

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()。节流将把内部函数的调用限制为每等待时间一次,无论包装函数被调用了多少次。

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>