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

Повторные resolve, reject и throw

Вопрос

Что выведет код?

const p = new Promise((resolve, reject) => {
  resolve('первый');
  resolve('второй');
  reject(new Error('ошибка'));
  throw new Error('бросок');
});
p.then(
  (v) => console.log('ok ' + v),
  (e) => console.log('fail ' + e.message),
);

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

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

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

Коротко

Код выведет: ok первый. Промис меняет состояние один раз.

Что выведет

ok первый

Разбор

Промис меняет состояние один раз. Первый resolve выполнил его значением первый. Повторный resolve, reject и даже исключение в executor после этого игнорируются: промис уже settled, а исключение после выполнения промис просто проглатывает. Выведется одна строка ok первый.

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

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

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