Дебод Lodash не работает при вызове из setInterval - PullRequest
0 голосов
/ 28 мая 2019

Я пытаюсь вызвать дебатированную функцию из 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 Ответ

1 голос
/ 28 мая 2019

Целью переноса функции с debounce является задержка выполнения функции до тех пор, пока она вызывается повторно. Параметр wait указывает время, которое должно пройти после последнего вызова дебазированной функции, прежде чем будет вызвана внутренняя функция. Если интервал вызывает функцию один раз каждые 1000 мс, а ожидание составляет 4000 мс, упакованная функция никогда не будет вызвана.

Изменение интервала на значение, меньшее 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>
...