Что выведет код Middle Промисы и async/await обновлено

Цепочка: забытый return, finally и восстановление

Вопрос

Что выведет код? По строке на каждый вывод.

Promise.resolve(1)
  .then((v) => { v + 1; })
  .then((v) => {
    console.log('a', v);
    throw new Error('x');
  })
  .finally(() => console.log('finally'))
  .catch((e) => {
    console.log('catch', e.message);
    return 'восстановились';
  })
  .then((v) => console.log('b', v));

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: a undefined, finally, catch x, b восстановились. В первом then тело в фигурных скобках без return, поэтому дальше идёт undefined: a undefined.

Что выведет

a undefined
finally
catch x
b восстановились

Разбор

В первом then тело в фигурных скобках без return, поэтому дальше идёт undefined: a undefined. Затем бросается ошибка. finally вызывается при любом исходе и пропускает ошибку дальше без изменений. catch ловит её и возвращает значение, после чего цепочка снова успешна: последний then получает восстановились.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

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