логотип PurpleSchool
Иконка входа
Вход
  • Обучение
  • Войти
логотип PurpleSchool

Метод Promise.any() в JavaScript

Автор

Дмитрий Нечаев

В мире асинхронного программирования JavaScript, Promise.any() представляет собой важный метод, который позволяет обрабатывать несколько промисов параллельно и возвращать результат первого успешно выполненного промиса. Эта функция очень полезна в ситуациях, когда необходимо получить результат из нескольких источников данных или операций, выбрав наиболее быстрый ответ, и продолжить выполнение программы, не дожидаясь окончания всех операций.

Основные аспекты Promise.any()

Метод Promise.any() принимает массив промисов и возвращает новый промис, который успешно разрешается, как только один из переданных промисов успешно разрешается. Если все промисы отклоняются, Promise.any() возвращает промис, который отклоняется с AggregateError — специальным типом ошибки, который содержит информацию о всех ошибках, возникших в процессе выполнения каждого из промисов.

Синтаксис:

Promise.any(iterable);
  • iterable — это итерируемый объект, такой как массив, содержащий промисы или значения, которые могут быть преобразованы в промисы.

Пример использования:

Рассмотрим ситуацию, где вы хотите получить данные из нескольких источников (например, разных API), и вам нужен ответ только от первого успешно отработавшего API.

let promise1 = fetch('<https://api.example.com/data1>').then(response => response.json());
let promise2 = fetch('<https://api.example.com/data2>').then(response => response.json());
let promise3 = fetch('<https://api.example.com/data3>').then(response => response.json());

Promise.any([promise1, promise2, promise3])
  .then(firstResult => {
    console.log('Первый успешно завершённый промис вернул:', firstResult);
  })
  .catch(error => {
    console.error('Все промисы были отклонены:', error);
  });

Обработка ошибок:

Promise.any() особенно полезен, когда важен результат хотя бы одной операции, и не критично, если другие операции завершатся неудачей. Однако, если все промисы отклоняются, Promise.any() создает экземпляр AggregateError, который нужно должным образом обработать, чтобы извлечь информацию обо всех ошибках.

Promise.any([Promise.reject('Ошибка 1'), Promise.reject('Ошибка 2')])
  .catch(error => {
    if (error instanceof AggregateError) {
      console.log('Не удалось выполнить ни один промис:');
      for (let e of error.errors) {
        console.log(e);
      }
    }
  });

Заключение

Метод Promise.any() в JavaScript предоставляет мощный инструмент для работы с асинхронными операциями, когда нужно обрабатывать множество задач параллельно и продолжить выполнение при первом же успешном завершении одной из них. Это особенно актуально для приложений, где время отклика является критическим фактором. Надлежащее использование и обработка ошибок с помощью Promise.any() могут значительно повысить эффективность и устойчивость ваших JavaScript-приложений.

изображение курса

Основы JavaScript

Антон Ларичев
иконка часов18 часов лекций
иконка звёздочки рейтинга4.8
Frontend
Backend
Mobile
2 999 ₽
Основы JavaScript