Код Senior Реализация с нуля обновлено
Склейка вызовов в пачку
Условие
batched(fn, wait): собирает аргументы одиночных вызовов за окно wait и один раз вызывает fn(массивАргументов). Каждый вызов возвращает промис со своим результатом (fn возвращает массив результатов в том же порядке).
Что проверяют тесты
склеивает вызовы
следующее окно - новый вызов
ошибка доходит до всех
Как подойти
Очередь {arg, resolve, reject} + один таймер на окно. Забрать текущую очередь и сбросить её ДО await - иначе гонка. Это ядро DataLoader и батчинга запросов, сильный ответ на «как бы вы уменьшили число запросов».
Подсказки: 3
- Каждому вызову нужно вернуть его собственный resolve - храни их в очереди.
- Таймер ставится только первым вызовом окна.
- Перед await обнули очередь, иначе следующие вызовы попадут в текущую пачку.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.