Массив Promise обработка исключений? Добрый день. Есть массив промисов, необходимо их выполнить параллельно(асинхронно). Как это можно сделать? let arr = [new Promise[pending],new Promise[pending],new Promise[pending] Одно из решений которое я нашел это Promise.All([arr]). Но некоторые обещания выполняются с reject, а Promise.All срабатывает если обещания резолв. Например у меня есть массив Promise из const cmd = require('node-cmd-promise'); let promisesArray = [] let array = ['google.ru', 'yandex.ru', 'habrahabr.ru', 'yana.ru'] for (let i = 0;i console.log(error)).then(results => console.log(results)) но он может не сработать так как один из промисов даст reject если адрес не пингуется. Как заставить сработать все обещания, а те которые не сработали обработать в catch?
Для обработки исключений в массиве Promise и продолжения выполнения всех промисов, даже если один или несколько из них завершаются с отклонением, вам нужно использовать метод Promise.allSettled(). Этот метод ждет завершения всех промисов в массиве, независимо от результата.
Пример кода:
const cmd = require('node-cmd-promise'); let promisesArray = []; let array = ['google.ru', 'yandex.ru', 'habrahabr.ru', 'yana.ru']; for (let i = 0; i < array.length; ++i) { promisesArray.push(cmd(`ping ${array[i}`).catch(error => error)); } Promise.allSettled(promisesArray) .then(results => { results.forEach(result => { if (result.status === 'fulfilled') { console.log('Resolved:', result.value); } else { console.log('Rejected:', result.reason); } }); });
В этом коде мы создаем массив промисов, каждый из которых выполняет команду ping для определенного адреса. Метод catch() используется для перехвата ошибок в случае, если адрес не пингуется. Затем мы используем Promise.allSettled() для выполнения всех промисов и обработки результатов, независимо от того, завершились они успешно или с отклонением. В итоге, мы выводим результат выполнения для каждого промиса.
Для обработки исключений в массиве Promise и продолжения выполнения всех промисов, даже если один или несколько из них завершаются с отклонением, вам нужно использовать метод Promise.allSettled(). Этот метод ждет завершения всех промисов в массиве, независимо от результата.
Пример кода:
const cmd = require('node-cmd-promise');let promisesArray = [];
let array = ['google.ru', 'yandex.ru', 'habrahabr.ru', 'yana.ru'];
for (let i = 0; i < array.length; ++i) {
promisesArray.push(cmd(`ping ${array[i}`).catch(error => error));
}
Promise.allSettled(promisesArray)
.then(results => {
results.forEach(result => {
if (result.status === 'fulfilled') {
console.log('Resolved:', result.value);
} else {
console.log('Rejected:', result.reason);
}
});
});
В этом коде мы создаем массив промисов, каждый из которых выполняет команду ping для определенного адреса. Метод catch() используется для перехвата ошибок в случае, если адрес не пингуется. Затем мы используем Promise.allSettled() для выполнения всех промисов и обработки результатов, независимо от того, завершились они успешно или с отклонением. В итоге, мы выводим результат выполнения для каждого промиса.