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