Ответ
Promise.allSettled() — это статический метод, который принимает итерируемую коллекцию промисов (например, массив) и возвращает новый промис. Этот новый промис выполнится (fulfilled) только после того, как все переданные промисы будут завершены — независимо от того, успешно (fulfilled) или с ошибкой (rejected).
Ключевое отличие от Promise.all(): Promise.all() немедленно завершается с ошибкой, если хотя бы один из промисов отклоняется. Promise.allSettled() ждёт завершения всех, что критически важно для сценариев, где нужно обработать результаты всех операций (например, отправка аналитики, массовая обработка записей).
Пример в контексте Node.js (обработка нескольких API-запросов):
const axios = require('axios');
const apiEndpoints = [
'https://api.example.com/users',
'https://api.example.com/posts',
'https://api.invalid-url.com/error' // Этот запрос завершится ошибкой
];
const promises = apiEndpoints.map(url => axios.get(url).catch(e => e));
Promise.allSettled(promises)
.then(results => {
console.log('Итоги всех запросов:');
results.forEach((result, index) => {
if (result.status === 'fulfilled') {
console.log(`✅ Запрос ${index}: Успех. Данные:`, result.value.data);
} else {
console.log(`❌ Запрос ${index}: Ошибка. Причина:`, result.reason.message);
}
});
});
Структура результата: Каждый элемент в результирующем массиве — это объект с обязательным полем status.
- Если
status: 'fulfilled', то присутствует свойствоvalue, содержащее результат успешного промиса. - Если
status: 'rejected', то присутствует свойствоreason, содержащее ошибку (например, объектError).