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