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

Обработка без блокировки потока

Условие

processInChunks(items, fn, chunkSize): обрабатывает элементы пачками, между пачками отдаёт управление циклу событий. Возвращает промис с массивом результатов.

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

  • обрабатывает всё

  • отдаёт управление между пачками

  • пустой список

  • индекс передаётся

Как подойти

Длинный синхронный цикл блокирует отрисовку и обработку ввода. Разбиение на пачки с уступкой управления возвращает интерфейсу отзывчивость. Важная тонкость: await Promise.resolve() не помогает - микрозадачи выполняются в том же тике, до отрисовки. Нужна именно макрозадача (setTimeout, MessageChannel) либо requestIdleCallback. Правильный ответ уровня senior - вынести в Web Worker, если работа чисто вычислительная.

Подсказки: 3
  1. Пауза между пачками - это await на setTimeout(0).
  2. После последней пачки ждать не нужно.
  3. Микрозадача управление не отдаёт - нужна макрозадача.

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

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