Порядок вывода в консоль (пример 106)

Порядок вывода: 1, 6, 3, 5, 2, 4, 7. Promise с 4 ждёт отдельный таймер, поэтому его then не входит в начальную очередь готовых микрозадач.

Короткий ответ

Что ответить на собеседовании

Порядок вывода: 1, 6, 3, 5, 2, 4, 7. Promise с 4 ждёт отдельный таймер, поэтому его then не входит в начальную очередь готовых микрозадач.

Подробный разбор

Ответ с пояснениями

Условие

Какой будет порядок печати в консоль?

console.log(1);

setTimeout(() => console.log(2), 0);

Promise.resolve(3).then(console.log);

new Promise(resolve => setTimeout(resolve, 0)).then(() => console.log(4));

Promise.reject(5).catch(console.log);

console.log(6);

setTimeout(() => console.log(7), 0);

Ответ

Порядок вывода: 1, 6, 3, 5, 2, 4, 7. Promise с 4 ждёт отдельный таймер, поэтому его then не входит в начальную очередь готовых микрозадач.

Синхронно печатаются 1 и 6. Уже завершённые Promise ставят then с 3 и catch с 5, которые выполняются следующими.

Потом запускается таймер 2. Следующий таймер разрешает Promise для 4; его микрозадача выполняется до перехода к оставшемуся таймеру 7. Нельзя просто собрать все сообщения Promise перед всеми setTimeout: важно, когда именно каждый Promise становится завершённым.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее