логотип PurpleSchool
логотип PurpleSchool

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

Автор

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

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

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

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

Синтаксис:

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

Метод Promise.any() является сравнительно новым методом, который позволяет дождаться первого успешно выполненного промиса из набора, игнорируя отклоненные промисы, если хотя бы один завершился успешно. Для полного понимания сценариев использования Promise.any() необходимо твердое понимание работы с Promise и обработки ошибок. Если вы хотите детальнее погрузиться в JavaScript — приходите на наш большой курс JavaScript Advanced. На курсе 196 уроков и 18 упражнений, AI-тренажеры для безлимитной практики с кодом и задачами 24/7, решение задач с живым ревью наставника, еженедельные встречи с менторами.

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

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

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

Стрелочка влевоМетод Promise.race() в JavaScriptМетод Promise.allSettled() в JavaScriptСтрелочка вправо

Постройте личный план изучения Javascript до уровня Middle — бесплатно!

Javascript — часть карты развития Frontend

  • step100+ шагов развития
  • lessons30 бесплатных лекций
  • lessons300 бонусных рублей на счет

Бесплатные лекции

Все гайды по Javascript

Как работает метод trim() - JavaScriptКак работает метод toUpperCase() - JavaScriptКак работает метод toLowerCase() - JavaScriptКак работает метод substring() - JavaScriptКак работает метод startsWith() - JavaScriptКак работает метод split() - JavaScriptКак работает метод slice() - JavaScriptКак работает метод search() - JavaScriptКак работает метод replaceAll() - JavaScriptКак работает метод replace() - JavaScriptКак работает метод repeat() - JavaScriptКак работает метод padStart() - JavaScriptКак работает метод padEnd() - JavaScriptКак работает метод matchAll() - JavaScriptКак работает метод match() - JavaScriptКак работает метод localeCompare() - JavaScriptКак работает свойство length - JavaScriptКак работает метод lastIndexOf() - JavaScriptКак работает метод indexOf() - JavaScriptКак работает метод includes() - JavaScriptКак работает метод fromCodePoint() - JavaScriptКак работает метод fromCharCode() - JavaScriptКак работает метод endsWith() - JavaScriptКак работает метод concat() - JavaScriptКак работает метод codePointAt() - JavaScriptКак работает метод charCodeAt() - JavaScriptКак работает метод charAt() - JavaScript
Итератор в JavaScript
try...catch в JavaScriptError в JavaScript
Событие wheel в JavaScriptСобытие unload в JavaScriptСобытие touch в JavaScriptСобытие submit в JavaScriptСобытие scroll в JavaScriptСобытие reset в JavaScriptМетод .preventDefault() в JavaScriptСобытие mouseover в JavaScriptСобытие mouseout в JavaScriptСобытие load в JavaScriptСобытие keyup в JavaScriptСобытие keydown в JavaScriptСобытие invalid в JavaScriptСобытие input в JavaScriptСобытийная модель Event в JavaScriptОбъект события Event в JavaScriptСобытие DOMContentLoaded в JavaScriptСобытие dblclick в JavaScriptСобытие click в JavaScriptСобытие change в JavaScriptСобытие beforeunload в JavaScript
Как работает метод some() - JavaScriptКак работает метод reverse() - JavaScriptКак работает метод reduce() - JavaScriptКак работает метод map() - JavaScriptКак работает метод isArray() - JavaScriptКак работает метод indexOf() - JavaScriptКак работает метод includes() - JavaScriptКак работает метод from() - JavaScriptКак работает метод forEach() - JavaScriptКак работает метод flatMap() - JavaScriptКак работает метод flat() - JavaScriptКак работает метод findIndex() - JavaScriptКак работает метод find() - JavaScriptКак работает метод filter() - JavaScriptКак работает метод every() - JavaScriptМассивы в JavaScript
Открыть базу знаний

Лучшие курсы по теме

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

Основы JavaScript

Антон Ларичев
AI-тренажеры
Практика в студии
Гарантия
Бонусы
иконка звёздочки рейтинга4.8
3 999 ₽ 6 990 ₽
Подробнее
изображение курса

TypeScript с нуля

Антон Ларичев
AI-тренажеры
Практика в студии
Гарантия
Бонусы
иконка звёздочки рейтинга4.7
3 999 ₽ 6 990 ₽
Подробнее
изображение курса

Next.js - с нуля

Антон Ларичев
AI-тренажеры
Практика в студии
Гарантия
Бонусы
иконка звёздочки рейтинга4.7
3 999 ₽ 6 990 ₽
Подробнее

Отправить комментарий