从 setInterval 调用时,Lodash 去抖不起作用

Lodash debounce doesn't work when called from setInterval

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

const _ = require('lodash');

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

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

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

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

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

将间隔更改为小于 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()。 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>