Обработка без блокировки потока
Условие
processInChunks(items, fn, chunkSize): обрабатывает элементы пачками, между пачками отдаёт управление циклу событий. Возвращает промис с массивом результатов.
Что проверяют тесты
обрабатывает всё
отдаёт управление между пачками
пустой список
индекс передаётся
Как подойти
Длинный синхронный цикл блокирует отрисовку и обработку ввода. Разбиение на пачки с уступкой управления возвращает интерфейсу отзывчивость. Важная тонкость: await Promise.resolve() не помогает - микрозадачи выполняются в том же тике, до отрисовки. Нужна именно макрозадача (setTimeout, MessageChannel) либо requestIdleCallback. Правильный ответ уровня senior - вынести в Web Worker, если работа чисто вычислительная.
Подсказки: 3
- Пауза между пачками - это await на setTimeout(0).
- После последней пачки ждать не нужно.
- Микрозадача управление не отдаёт - нужна макрозадача.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.