Определение последовательности вывода в консоль

Порядок: 1, 6, 3, 5, 7, 8, 2, 4. catch обрабатывает отклонение и делает доступным следующий then; Promise с таймером разрешается только после таймера 2.

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

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

Порядок: 1, 6, 3, 5, 7, 8, 2, 4. catch обрабатывает отклонение и делает доступным следующий then; Promise с таймером разрешается только после таймера 2.

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

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

Условие

Нужно выяснить, в каком порядке будут напечатаны значения в консоль, учитывая синхронные вызовы, микрозадачи (Promise.then, .catch) и макрозадачи (setTimeout).

console.log(1);

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

Promise.reject(3)
  .catch(console.log)
  .then(() => console.log(7));

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

Promise.resolve(5)
  .then(console.log)
  .then(() => console.log(8));

console.log(6);

Ответ

Порядок: 1, 6, 3, 5, 7, 8, 2, 4. catch обрабатывает отклонение и делает доступным следующий then; Promise с таймером разрешается только после таймера 2.

Синхронно печатаются 1 и 6. Первые микрозадачи — catch с 3 и then с 5; они добавляют в конец очереди обработчики 7 и 8. После их выполнения запускается таймер, печатающий 2, затем таймер resolve второго Promise. Уже после этого resolve запускает микрозадачу с 4. Отсутствие явного значения resolve не мешает callback, который сам печатает 4.

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

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

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

Подробнее