Что выведет код 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 ошибок.

Термины по теме