Массив 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?

21 Авг 2019 в 06:30
236 +1
1
Ответы
1

Для обработки исключений в массиве 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() для выполнения всех промисов и обработки результатов, независимо от того, завершились они успешно или с отклонением. В итоге, мы выводим результат выполнения для каждого промиса.

20 Апр в 13:17
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 493 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир