Код Senior Реализация с нуля обновлено

throttle с контекстом и последним вызовом

Условие

throttle(fn, delay, ctx): вызывает fn не чаще раза в delay мс, с контекстом ctx. Первый вызов проходит сразу. Если проигнорированный вызов оказался последним в окне - он обязан выполниться в конце окна.

Что проверяют тесты

  • первый вызов сразу, с контекстом

  • последний игнорируемый выполняется

  • редкие вызовы проходят все

  • одиночный вызов не дублируется

Как подойти

Задача с диаграммой на собеседовании: точки - вызовы обёртки, восклицательные знаки - фактические вызовы fn. Из неё читается требование «и первый, и последний». Разница с debounce в одной строке: здесь при существующем таймере мы выходим, а debounce его сбрасывает. Критично не поставить второй таймер и не продублировать одиночный вызов - тест с одним вызовом ловит именно это.

Подсказки: 3
  1. Нужны и leading, и trailing: первый вызов сразу, последний - в конце окна.
  2. Таймер ставится один на окно и не перезапускается при каждом вызове.
  3. Контекст фиксирован аргументом - apply, а не вызов напрямую.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.