Порядок: start, promise constructor, final, promise1, promise3 undefined, promise4, timeout. Первый then и второй catch ничего не выведут.
Promise-цепочка: undefined после обработанного отказа
Порядок: start, promise constructor, final, promise1, promise3 undefined, promise4, timeout. Первый then и второй 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', a)) // 5 .then(() => console.log('promise4')); // 6
console.log('final'); // 3
Ответ
Порядок: start, promise constructor, final, promise1, promise3 undefined, promise4, timeout. Первый then и второй catch ничего не выведут.
Executor Promise выполняется синхронно и сразу вызывает reject. После синхронного кода цепочка доходит до первого catch: он логирует promise1 и возвращает undefined, превращая продолжение в успешное. Поэтому второй catch пропускается, а then получает undefined. Таймер выполняется после этих микрозадач.