Promise: обработка отказа первым catch и порядок вывода

Порядок: start, promise constructor, final, promise1, promise3, promise4, timeout. Первый catch обрабатывает отказ, поэтому второй catch пропускается.

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

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

Порядок: start, promise constructor, final, promise1, promise3, promise4, timeout. Первый catch обрабатывает отказ, поэтому второй catch пропускается.

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

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

Условие

console.log('start'); // 1

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

new Promise((resolve, reject) => {

console.log('promise constructor'); // 2

reject(); }).then(() => console.log('promise')) // .catch(() => console.log('promise1')) // 4 .catch(() => console.log('promise2')) // .then((a) => console.log('promise3')) // 5 .then(() => console.log('promise4')); // 6

console.log('final'); // 3

Ответ

Порядок: start, promise constructor, final, promise1, promise3, promise4, timeout. Первый catch обрабатывает отказ, поэтому второй catch пропускается.

Executor Promise выполняется синхронно, поэтому сообщение конструктора идёт до final. Вызов reject() отклоняет промис, и первый then без обработчика ошибки пропускается. Первый catch выводит promise1 и завершается успешно со значением undefined. Следующий catch уже не вызывается; последующие then выводят promise3 и promise4. Все эти реакции проходят как микрозадачи до callback таймера.

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

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

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

Подробнее