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

Склейка вызовов в пачку

Условие

batched(fn, wait): собирает аргументы одиночных вызовов за окно wait и один раз вызывает fn(массивАргументов). Каждый вызов возвращает промис со своим результатом (fn возвращает массив результатов в том же порядке).

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

  • склеивает вызовы

  • следующее окно - новый вызов

  • ошибка доходит до всех

Как подойти

Очередь {arg, resolve, reject} + один таймер на окно. Забрать текущую очередь и сбросить её ДО await - иначе гонка. Это ядро DataLoader и батчинга запросов, сильный ответ на «как бы вы уменьшили число запросов».

Подсказки: 3
  1. Каждому вызову нужно вернуть его собственный resolve - храни их в очереди.
  2. Таймер ставится только первым вызовом окна.
  3. Перед await обнули очередь, иначе следующие вызовы попадут в текущую пачку.

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

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