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

throttle с leading/trailing

Условие

throttle(fn, wait, {leading = true, trailing = true}). leading - вызвать сразу на первом вызове; trailing - вызвать в конце окна, если за окно были вызовы.

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

  • leading срабатывает сразу

  • trailing добирает последний вызов

  • leading:false не вызывает сразу

  • trailing:false не добирает

Как подойти

Инварианты: last - время последнего фактического вызова, timer - запланированный trailing. remaining = wait - (now - last). remaining <= 0 → вызываем немедленно. Иначе ставим один trailing-таймер на остаток и перезаписываем lastArgs. Это lodash-семантика, её и ждут.

Подсказки: 3
  1. Храни время последнего фактического вызова и вычисляй, сколько осталось до конца окна.
  2. Если окно ещё не кончилось и таймера нет - поставь таймер ровно на остаток.
  3. Для leading:false притворись, что окно только началось.

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

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