Назад к вопросам
Aston
Middle
2
Расскажите про методы Promise.all, Promise.race и Promise.allSettled. В чём их отличие?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Методы Promise.all, Promise.race и Promise.allSettled — это разные способы работы с несколькими промисами одновременно.
-
Promise.all(iterable) принимает массив (или другой итерируемый объект) промисов и возвращает новый промис, который:
- резолвится, когда все промисы из массива успешно завершились, возвращая массив результатов в том же порядке;
- отклоняется сразу, если хотя бы один из промисов отклоняется, с ошибкой этого промиса.
-
Promise.race(iterable) возвращает промис, который резолвится или отклоняется как только первый из переданных промисов завершится (успешно или с ошибкой). То есть "гонка" между промисами.
-
Promise.allSettled(iterable) возвращает промис, который резолвится, когда все промисы завершатся (независимо от результата). В отличие от Promise.all, он не отклоняется при ошибках, а возвращает массив объектов с информацией о статусе каждого промиса:
[ { status: 'fulfilled', value: ... }, { status: 'rejected', reason: ... }, ... ]
Итог:
- Promise.all — ждёт успешного завершения всех, или сразу отклоняется при ошибке.
- Promise.race — ждёт первого завершившегося (успешно или с ошибкой).
- Promise.allSettled — ждёт завершения всех, независимо от успеха или ошибки, и возвращает подробный статус каждого.