Перейти к содержимому

API Promise JavaScript

В JavaScript освоение промисов имеет решающее значение для создания отзывчивых, масштабируемых и поддерживаемых приложений. Для ознакомления с промисами обратитесь к нашим предыдущим материалам, например, JavaScript: Промисы. В этой статье мы подробно рассмотрим особенности работы с промисами в JavaScript, уделяя особое внимание методам Promise.all, Promise.allSettled, Promise.race, а также реализации полифилов для этих методов. Углубив свои знания и навыки реализации этих продвинутых техник, вы значительно повысите эффективность и надёжность своего JavaScript-кода.

Использование Promise.all для выполнения задач параллельно

Promise.all — это важный метод для одновременной обработки нескольких промисов. Если вам нужно выполнить несколько асинхронных операций и продолжить работу только после того, как все они успешно завершатся, Promise.all — это именно тот инструмент, который вам нужен.

Как реализовать Promise.all

Ниже приведён пример, демонстрирующий использование Promise.all для одновременной обработки нескольких запросов к API:


Output appears here after Run.

В этом примере Promise.all принимает массив промисов и разрешается массивом результатов этих промисов. Если какой-либо промис завершится ошибкой, Promise.all отклонится с причиной первого отклонённого промиса.

Освоение Promise.allSettled

В отличие от Promise.all, метод Promise.allSettled возвращает промис, который разрешается после того, как все переданные промисы либо разрешатся, либо отклонятся, возвращая массив объектов, каждый из которых описывает результат соответствующего промиса.

Пример использования Promise.allSettled

Вот как можно использовать Promise.allSettled:


Output appears here after Run.

Примечание: Promise.allSettled никогда не отклоняется. Он всегда разрешается массивом объектов результатов, каждый из которых содержит свойство status ('fulfilled' или 'rejected') и либо свойство value, либо свойство reason.

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

Реализация Promise.race

Promise.race — ещё один мощный инструмент, позволяющий обрабатывать несколько промисов, разрешая или отклоняя их сразу же, как только один из промисов в итерируемом объекте разрешится или отклонится.

Как использовать Promise.race

Ниже приведён практический пример использования Promise.race:


Output appears here after Run.

Этот метод идеально подходит для сценариев, когда вам нужен самый быстрый результат среди нескольких асинхронных операций.

Создание полифила для Promise.allSettled

Не все среды поддерживают Promise.allSettled на нативном уровне. Поэтому реализация полифила может обеспечить совместимость в различных средах JavaScript.

Полифил для Promise.allSettled

Вот как можно создать простой полифил:


Output appears here after Run.

Этот полифил обеспечивает базовую функциональность, при которой каждый промис обрабатывается индивидуально и разрешается в соответствующий результат, эффективно имитируя поведение allSettled.

Интегрируя эти продвинутые техники работы с промисами и понимая внутреннюю механику полифилов, вы сможете вывести свой JavaScript-код на новый уровень. Эти методы не только повышают надёжность кода, но и предлагают более тонкий контроль над асинхронными операциями, прокладывая путь к созданию более устойчивых веб-приложений.

Практика

Какие из следующих утверждений о промисах в JavaScript являются верными согласно информации, представленной на сайте?

Считаете ли это полезным?

Предпросмотр dual-run — сравните с маршрутами Symfony на продакшене.