Год назад я окончил Georgia Tech Coding Bootcamp. Какой феноменальный опыт обучения - праздновать каждый день! #HappyOneYear

Во время моего учебного курса по кодированию я работал с серверной платформой Node.js для большинства своих проектов и чувствовал боль от работы с асинхронным кодом, поскольку в моих приложениях было так много операций ввода-вывода. Чтобы разобраться с асинхронным кодом, обещания попали в мою картину и оказались более многообещающими для обеспечения синхронного поведения кода.

В этой статье я объясню обещания самым простым из возможных способов.

Обещания

В Javascript функции обратного вызова изначально использовались для обработки асинхронных операций. Однако обратные вызовы были ограничены с точки зрения функциональности и часто приводили к неуправляемому коду, который создавал нечто, известное как ад обратных вызовов. Для решения этой проблемы были введены обещания. Основная идея обещаний заключается в том, что обещание представляет собой окончательное завершение или сбой асинхронной операции и ее результирующее значение.

Обещание представляет собой окончательное завершение или сбой асинхронной операции и ее результирующее значение.

Обещание находится в одном из следующих состояний:

Ожидание - начальное состояние, при котором результат неизвестен, поскольку операция еще не завершена.

Выполнено - состояние обещания, представляющего успешную операцию с полученным значением.

Отклонено - состояние обещания, представляющее неудачную операцию с указанием причины, по которой она не удалась.

После того, как обещание выполнено или отклонено, оно становится неизменным (т. Е. Никогда не может измениться снова).

Создание простого обещания

В этом примере ниже обещание создается с использованием ключевого слова new и его конструктора, который принимает функцию обратного вызова с двумя аргументами. Предполагается, что код выполняется успешно. Если задача выполнена успешно, обещание разрешено; передается необязательный параметр «Обещанное задание выполнено успешно». Если задача не выполнена, обещание отклоняется; передается необязательный параметр «Обещанное задание не выполнено». Используются методы .then () и .catch (), поэтому мы можем вернуть значение вызываемого обработчика, то есть разрешить / отклонить.

Методы

Promise.all ()

Метод Promise.all () возвращает одно обещание, которое выполняется, когда все обещания, переданные как итерируемый, были выполнены, или когда итерируемый объект не содержит обещаний, или когда итерируемый объект содержит обещания, которые были выполнены, и невыполненные обещания, которые были возвращены. . Он отклоняет по причине первого обещания, которое отклоняется, или с ошибкой, обнаруженной первым аргументом, если этот аргумент обнаружил ошибку внутри него с помощью блоков try / catch / throw.

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

Promise.allSettled ()

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

Promise.race ()

Метод Promise.race () возвращает обещание, которое выполняется или отклоняется, как только одно из обещаний в итерируемом объекте выполняется или отклоняется со значением или причиной из этого обещания.

Вывод

Обещания - это способ аккуратно связать асинхронные операции без глубоко вложенных обратных вызовов.

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

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

Promise.race - он вернет экземпляр обещания, который сначала разрешен или отклонен.

Спасибо за чтение.