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

all, allSettled и any на одних данных

Вопрос

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

const ok = (v) => Promise.resolve(v);
const fail = (m) => Promise.reject(new Error(m));
(async () => {
  try {
    await Promise.all([ok(1), fail('A'), fail('B')]);
  } catch (e) {
    console.log('all: ' + e.message);
  }
  const settled = await Promise.allSettled([ok(1), fail('C')]);
  console.log(settled.map((s) => s.status).join(','));
  console.log('any: ' + (await Promise.any([fail('D'), ok(2)])));
  try {
    await Promise.any([fail('E'), fail('F')]);
  } catch (e) {
    console.log(e.constructor.name, e.errors.length);
  }
})();

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

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

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

Коротко

Код выведет: all: A, fulfilled,rejected, any: 2, AggregateError 2. Promise.all отклоняется первой ошибкой в порядке их наступления; оба промиса уже отклонены, первым обработан A. allSettled никогда не падает и отдаёт статусы в порядке входа: fulfilled,rejected. any пропускает ошибку D и берёт первый успех…

Что выведет

all: A
fulfilled,rejected
any: 2
AggregateError 2

Разбор

Promise.all отклоняется первой ошибкой в порядке их наступления; оба промиса уже отклонены, первым обработан A. allSettled никогда не падает и отдаёт статусы в порядке входа: fulfilled,rejected. any пропускает ошибку D и берёт первый успех 2. Если упали все, any отклоняется с AggregateError, где в errors лежат обе причины.

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

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

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