Код 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
- Храни время последнего фактического вызова и вычисляй, сколько осталось до конца окна.
- Если окно ещё не кончилось и таймера нет - поставь таймер ровно на остаток.
- Для leading:false притворись, что окно только началось.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.