логотип 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-приложений.

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

Все гайды по 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
Открыть базу знаний