Я чувствую, что ваше решение немного сложнее. Я думаю, что вы описываете отладку функций:
Это может быть немного сложнее объяснить. При использовании debouncing это похоже на «Эй, я не собираюсь выполнять эту функцию, пока не узнаю, что больше нет входящих изменений». Мы не выполняем нашу функцию до тех пор, пока все остальные не будут довольны, и мы не будем продолжать. Представьте себе заказ еды в ресторане. Вы начинаете перечислять вещи официанту / официантке, и в конце они спрашивают: «Это все?» Если это так, они оставляют вас на это и go получают вашу еду и напитки. Если это не так, вы добавляете в заказ, а затем они просят вас снова, пока они не будут ясно, чтобы продолжить - Дросселирование и дебутинг в JavaScript - Джи Томпкинс - https://codeburst.io/throttling-and-debouncing-in-javascript-b01cad5c8edf
В основном как-то так:
const fn = (() => {
let timer = null;
const myFn = () => {
timer = null;
console.log('My fn has been ran!');
};
return () => {
if(timer != null){
clearTimeout(timer);
}
timer = setTimeout(myFn,5000);
};
})();
Таким образом, когда вы звоните функция, он будет ждать 15 секунд, чтобы запустить фактическую логи c. Однако, если функция вызывается снова в течение этих 15 секунд, таймер перезапускается.
Обычно для чего-то подобного вы используете библиотечную функцию, чтобы вам не приходилось каждый раз писать весь этот шаблон:
function debounce(fn,time){
let timer = null;
return function(...args){
if(timer != null){
clearTimeout(timer);
}
timer = setTimeout(fn.bind(this,...args),5000);
};
}
// Usage
const myFn = debounce((name) => {
console.log('Hello %s!',name);
},1000);
// This function won't output "Hello !"
myFn('Joe');
// This function will
myFn('John');