Что выведет код 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 ошибок.
Предыдущий вопрос
Цепочка: забытый return, finally и восстановление
Следующий вопрос
race не отменяет проигравших