Что выведет код Senior Промисы и async/await обновлено
Две цепочки от одного отклонённого промиса
Вопрос
Что выведет код? По строке на каждый вывод.
const p = Promise.reject(new Error('x'));
p.then(() => console.log('6'))
.catch(() => console.log('9'))
.then(() => console.log('11'));
p.catch(() => console.log('16'))
.then(() => console.log('19'))
.catch(() => console.log('21'));
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: 16, 9, 19, 11. Почему так От одного промиса можно построить несколько независимых цепочек - он не «расходуется».
Что выведет
16
9
19
11
Разбор
Почему так
От одного промиса можно построить несколько независимых цепочек - он не «расходуется». Первая цепочка тратит один шаг на then, который отказ пропускает, поэтому её catch срабатывает во второй микрозадаче. Вторая ловит отказ сразу. Дальше цепочки продвигаются по очереди, шаг за шагом - отсюда чередование. После catch цепочка снова в состоянии успеха, поэтому последний catch не срабатывает.
Вывод
16
9
19
11
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.