Порядок: 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.