throttle с контекстом и последним вызовом
Условие
throttle(fn, delay, ctx): вызывает fn не чаще раза в delay мс, с контекстом ctx. Первый вызов проходит сразу. Если проигнорированный вызов оказался последним в окне - он обязан выполниться в конце окна.
Что проверяют тесты
первый вызов сразу, с контекстом
последний игнорируемый выполняется
редкие вызовы проходят все
одиночный вызов не дублируется
Как подойти
Задача с диаграммой на собеседовании: точки - вызовы обёртки, восклицательные знаки - фактические вызовы fn. Из неё читается требование «и первый, и последний». Разница с debounce в одной строке: здесь при существующем таймере мы выходим, а debounce его сбрасывает. Критично не поставить второй таймер и не продублировать одиночный вызов - тест с одним вызовом ловит именно это.
Подсказки: 3
- Нужны и leading, и trailing: первый вызов сразу, последний - в конце окна.
- Таймер ставится один на окно и не перезапускается при каждом вызове.
- Контекст фиксирован аргументом - apply, а не вызов напрямую.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.