Расскажи про методы Promise: Promise.all, Promise.allSettled, Promise.race, Promise.any — чем они отличаются друг от друга?
Answer from AI
sobes.tech AI
Все эти методы работают с массивом промисов, но отличаются по поведению и результатам:
-
Promise.all(iterable) — ждёт, пока все промисы успешно завершатся, и возвращает массив результатов в том же порядке. Если хотя бы один промис отклоняется (reject), весь Promise.all отклоняется с этой ошибкой.
-
Promise.allSettled(iterable) — ждёт завершения всех промисов, независимо от их статуса (fulfilled или rejected). Возвращает массив объектов с полями
{status: "fulfilled" | "rejected", value | reason}для каждого промиса. -
Promise.race(iterable) — возвращает результат первого завершившегося промиса (успешного или с ошибкой). Как только один промис завершится, возвращается его результат или ошибка.
-
Promise.any(iterable) — ждёт первого успешно завершившегося промиса и возвращает его результат. Если все промисы отклоняются, возвращает AggregateError с ошибками всех промисов.
Пример:
const p1 = Promise.resolve(1);
const p2 = Promise.reject('error');
const p3 = new Promise(res => setTimeout(() => res(3), 100));
Promise.all([p1, p3])
.then(console.log) // [1, 3]
.catch(console.error);
Promise.allSettled([p1, p2])
.then(console.log); // [{status: 'fulfilled', value: 1}, {status: 'rejected', reason: 'error'}]
Promise.race([p3, p1])
.then(console.log); // 1 (p1 быстрее)
Promise.any([p2, p3])
.then(console.log) // 3 (первый успешный)
.catch(console.error);