Ответ
Для этого можно использовать Promise.allSettled(). Он возвращает массив результатов всех промисов, независимо от их статуса (fulfilled/rejected). Каждый результат — объект с полями:
status: "fulfilled" или "rejected"value(если fulfilled) илиreason(если rejected)
Пример:
const promises = [
Promise.resolve('Успех'),
Promise.reject('Ошибка'),
Promise.resolve('Ещё успех')
];
Promise.allSettled(promises).then(results => {
results.forEach((result, index) => {
if (result.status === 'fulfilled') {
console.log(`Промис ${index} успешен:`, result.value);
} else {
console.log(`Промис ${index} провален:`, result.reason);
}
});
});
Альтернатива — Promise.all(), но он останавливается при первой ошибке.
Ответ 18+ 🔞
А, ну ты про это, про промисы! Да, блядь, классика — Promise.all() такой: "Ой, один сломался? Ну нахуй тогда все, я в домике!" Не, серьёзно, он на первой же ошибке весь твой красивый параллельный запуск в труху разносит. Пиздец как неудобно, если тебе ВСЕ результаты нужны, даже от тех, кто обосрался.
Так вот, есть же Promise.allSettled(), хитрая жопа! Этот чувак не паникует. Он всех дождётся — и победителей, и лузеров. Возвращает он массив, а там каждый элемент — объектик. У этого объекта два главных поля, запоминай:
status: тут либо "fulfilled" (ну, типа "окей, справился"), либо "rejected" (ну, "пошёл нахуй, не вышло").- И в зависимости от статуса — либо
value(значение, если всё заебись), либоreason(причина провала, если всё пиздец).
Смотри, как это выглядит в деле, я тебе накидаю пример, чтоб совсем понятно было:
const promises = [
Promise.resolve('Успех'),
Promise.reject('Ошибка'),
Promise.resolve('Ещё успех')
];
Promise.allSettled(promises).then(results => {
results.forEach((result, index) => {
if (result.status === 'fulfilled') {
console.log(`Промис ${index} успешен:`, result.value); // Тут value
} else {
console.log(`Промис ${index} провален:`, result.reason); // А тут reason
}
});
});
Запустишь — и увидишь всю подноготную: кто что вернул и кто в чём обосрался. Удобно, блядь, как швейцарские часы! Так что если тебе нужно именно "всех опросить и всех послушать", а не "первый же косяк — и паника на корабле", то это твой выбор. Ёпта, вот и вся магия.