Promise.any()

Этот перевод не завершён. Пожалуйста, помогите перевести эту статью с английского

Метод Promise.any() принимает итерируемый объект содержащий объекты "обещаний" Promise. Как только одно из "обещаний"(Promise) выполнится успешно(fullfill), метод возвратит единственный объект Promise со значением выполненного "обещания". Если ни одно из "обещаний" не завершится успешно(если все "обещания" завершатся с ошибкой, т.е. rejected), тогда возвращенный объект promise будет отклонен(rejected) с одним из значений: массив содержащий причины ошибки(отклонения), или AggregateError — подкласс Error, который объединяет выброшенные ошибки вместе. По-существу, метод Promise.any() является противоположностью для Promise.all().

Warning! The Promise.any() method is experimental and not fully supported by all browsers. It is currently in the TC39 Candidate stage (Stage 3).

Синтаксис

Promise.any(iterable);

Параметры

iterable
Итерируемый(iterable) объект, например Array.

Возвращаемое значение

  • Исполненный Promise, если переданный итерируемый объект пуст.
  • Исполненный асинхронно Promise, если переданный итерируемый объект не содержит "обещаний"(promises).
  • Во всех других случаях Promise со статусом ожидания(pending). Возвращенное "обещание" будет исполнено(resolved/rejected) асинхронно (как только стэк вызовов окажется пустым), когда одно(любое) "обещание" из  переданного итерируемого объекта исполнится, либо все "обещания" будут отклонены.

Описание

Метод полезен, когда нужно вернуть первое исполненное "обещание". После того как одно из "обещаний" будет исполнено, метод не будет дожидаться исполнения остальных. В отличие от Promise.all(), который содержит массив(Array) значений исполненных обещаний, Promise.any() содержит только одно значение (при условии, что хотя бы одно из "обещаний" исполнено успешно). Такой подход может быть выгодным, когда нужно, чтобы выполнилось только одно "обещание", неважно какое. Также, в отличие от Promise.race(), который возвращает "обещание", содержащее значение первого завершенного(resolved или rejected), этот метод возвращает "обещание" содержащее значение первого успешно выполненного(resolved) "обещания". Метод будет игнорировать исполнение обещаний с ошибкой(rejection) вплоть до первого исполненного успешно(fullfilment).

Успешное исполнение(Fullfilment)

Если одно из "обещаний" исполнится успешно, возвращенное "обещание" асинхронно исполнится успешно со значением выполненного "обещания", независимо от завершения остальных "обещаний".

  • Если передан пустой итерируемый объект, тогда метод возвращает (синхронно) выполненное "обещание".
  • Если одно из переданных обещаний исполнится успешно, или в переданном итерируемом объекте не содержится "обещаний", "обещание" возвращенное из метода Promise.any асинхронно исполнится успешно.

Исполнение с ошибкой(Rejection)

Елси все переданные "обещания" будут отклонены(rejected), Promise.any асинхронно будет отклонено в одном из двух вариантов (которые еще не были согласованы): либо

  • Массив(Array) содержащий причины отклонения всех "обещаний" переданных в итерируемом объекте, либо
  • Объект AggregateError, расширяющий Error, который содержит указатель на массив(Array) исключений.

Спецификации

Specification
ESNext Promise.any Proposal

Совместимость с браузерами

No compatibility data found. Please contribute data for "javascript.builtins.Promise.any" (depth: 1) to the MDN compatibility data repository.

Смотрите также