Нам дана функция fn
, которая принимает произвольное количество аргументов. Она ничего не возвращает, просто выполняет какое-то асинхронное действие. Например, логирует какие-то события, отправляет запрос на бэкенд или, как в примере ниже, просто выводит в консоль свои аргументы.
Функция debounce
принимает функцию fn
и время ms
, а возвращает новую функцию, которая вызывает fn
, но контролирует, чтобы вызовы происходили не слишком часто — не чаще чем раз в ms
миллисекунд.
На картинке ниже изображены вызовы функции с задержкой равной 400 мс.
Верхняя серия прямоугольников — вызовы функции debouncedFn
. Один прямоугольник означает 100 мс. Например, первый розовый вызов произошел в момент времени 700 мс.
Нижняя серия прямоугольников показывает, когда реально произошли вызовы исходной функции fn
.
Комментариями помечены вызовы fn
, которые фактически произошли. 500, 1700 и 2500 — время в мс, когда они произошли.
function fn(...args) { console.log({ args, time: Date.now() - start, }); } const debouncedFn = debounce(fn, 400); let start = Date.now(); setTimeout(() => debouncedFn(1, "blue"), 0); setTimeout(() => debouncedFn(2, "green"), 100); // 500 setTimeout(() => debouncedFn(3, "pink"), 700); setTimeout(() => debouncedFn(4, "pink"), 1000); setTimeout(() => debouncedFn(5, "pink"), 1300); // 1700 setTimeout(() => debouncedFn(6, "blue"), 1800); setTimeout(() => debouncedFn(7, "green"), 1900); setTimeout(() => debouncedFn(8, "blue"), 2100); // 2500
Эта задача доступна при покупке курса или на индивидуальных занятиях.
Подборка задач по асинхронности содержит 35 задач, из которых 21 задача можно тестировать бесплатно.
После покупки курса открывается возможность отправлять все задачи без ограничений по количеству отправок, а также авторские решения и видеоразборы общей длительностью более 10 часов.