Код Middle Асинхронные паттерны спрашивают часто обновлено

mapLimit: параллельная обработка с ограничением

Условие

Напиши mapLimit(items, limit, fn): вызывает асинхронную fn(item, index) для каждого элемента, но одновременно в работе не больше limit вызовов. Возвращает промис с массивом результатов в исходном порядке. Если какой-то вызов упал, итоговый промис отклоняется этой ошибкой, новые вызовы больше не запускаются.

Так на бэкенде обходят 10 000 URL или пишут в БД пачками, не открывая 10 000 соединений разом.

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

  • результаты в исходном порядке

  • одновременно не больше limit

  • limit больше длины массива

  • пустой массив

  • ошибка отклоняет промис и останавливает запуск

  • fn получает индекс

Как подойти

Подсказки: 2
  1. Запусти limit «воркеров», каждый в цикле берёт следующий индекс из общего счётчика.
  2. Пиши результат по индексу, а не через push: так порядок сохранится.

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

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

Термины по теме