Обзор
Это решение для асинхронного программирования.
С точки зрения синтаксиса, Promise — это объект, из которого можно получать сообщения об асинхронных операциях.
Состояния Promise
Характеристики состояний
Асинхронные операции Promise имеют три состояния: pending (выполняется), fulfilled (успешно завершено) и rejected (завершено с ошибкой). За исключением результата асинхронной операции, никакая другая операция не может изменить это состояние.
Объекты Promise имеют только переходы состояний: из pending в fulfilled и из pending в rejected. После перехода в состояние fulfilled или rejected состояние больше не изменится, то есть resolved (settled).
Недостатки состояний
Promise нельзя отменить. После создания он сразу выполняется, и его нельзя отменить на полпути.
Если не установлена функция обратного вызова, ошибки, выброшенные внутри Promise, не будут видны извне.
Когда Promise находится в состоянии pending, невозможно узнать, на каком этапе находится текущий прогресс (только начался или почти завершён).
Метод then
Метод then принимает две функции в качестве параметров. Первый параметр — это функция обратного вызова для случая успешного выполнения Promise, а второй параметр — функция обратного вызова для случая, когда Promise завершается с ошибкой. Будет вызвана только одна из двух функций.
Особенности метода then
Функция обратного вызова не будет вызвана до завершения текущего прохода очереди событий JavaScript.
С помощью.thenфункции обратного вызова, добавленные в форму, будут вызваны независимо от того, когда.
При многократном вызове
Метод then возвращает объект Promise в состоянии resolved или rejected для цепочки вызовов, и значением объекта Promise является это возвращаемое значение.
На что следует обратить внимание в методе then
При простом программировании цепочек Promise лучше сохранять их плоскими и избегать вложенности Promise.
Всегда помните, что нужно возвращать или завершать цепочку Promise.
Когда вы создаёте новый Promise, но забываете вернуть его, соответствующая цепочка разрывается, из-за чего p4 продолжает выполняться одновременно с p2 и p3.
Для отклонений в цепочке Promise, которые невозможно завершить в большинстве браузеров, рекомендуется всегда добавлять.catch(error => console.log(error));