Back to questions
Middle+
5
В чём отличие Promise.all от Promise.allSettled?
Companies where asked
Ifellow
Answer from AI
sobes.tech AI
Promise.all и Promise.allSettled — это методы для работы с несколькими промисами, но они отличаются по поведению при ошибках.
-
Promise.all принимает массив промисов и возвращает новый промис, который:
- Резолвится, когда все промисы успешно завершены, с массивом результатов.
- Реджектится сразу, если хотя бы один промис отклонён (ошибка), и возвращает ошибку этого промиса.
-
Promise.allSettled принимает массив промисов и возвращает промис, который:
- Всегда резолвится, когда все промисы завершены, независимо от их результата.
- Возвращает массив объектов с состоянием каждого промиса (
fulfilledилиrejected) и соответствующим значением или причиной ошибки.
Пример:
const p1 = Promise.resolve(1);
const p2 = Promise.reject('error');
Promise.all([p1, p2])
.then(results => console.log(results))
.catch(error => console.log('Promise.all error:', error));
Promise.allSettled([p1, p2])
.then(results => console.log('Promise.allSettled results:', results));
Вывод:
Promise.all error: error
Promise.allSettled results: [
{ status: 'fulfilled', value: 1 },
{ status: 'rejected', reason: 'error' }
]
Таким образом, Promise.allSettled полезен, когда нужно дождаться завершения всех промисов и обработать их результаты независимо от ошибок.