我正在尝试从setInterval调用一个去抖动的函数,但是由于某种原因它不起作用并且该函数无法调用,所以知道为什么吗?
const _ = require('lodash');
const debouncedFunction = _.debounce(() => console.log('test'), 4000);
setInterval(() => {
console.log('tick');
debouncedFunction();
}, 1000);
值得一提的是,如果我将setInterval替换为setTimeout,那么它将起作用
答案 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>