Что такое Promise?
Promise или промис в JavaScript — это специальный объект, который служит для представления успешного или неудачного завершения асинхронной операции, а также ее результирующего значения. Промис можно представить как обещание вернуть какой-то результат в будущем: вы не получаете данные моментально, но знаете, что они появятся позже, либо получите уведомление об ошибке.
В любой момент времени промис находится в одном из трех возможных состояний. Начальным состоянием является pending или ожидание, когда асинхронная задача еще выполняется, и результат пока неизвестен. Если операция завершается успешно, промис переходит в состояние fulfilled или исполнено, возвращая итоговое значение. В случае возникновения ошибки промис переходит в состояние rejected или отклонено, возвращая причину сбоя. Важно отметить, что после того как промис перешел в состояние fulfilled или rejected, его статус уже никогда не сможет измениться.
Для работы с результатами промисов используются специальные методы экземпляра: then(), catch() и finally(). Метод then() принимает две функции обратного вызова: первая выполняется при успешном исполнении промиса, а вторая — при его отклонении. Метод catch() является удобным синтаксическим сахаром для обработки ошибок и вызывается, если промис был отвергнут. Метод finally() выполняется в любом случае после завершения работы промиса, независимо от его успеха или неуспеха, что удобно для очистки ресурсов или скрытия индикаторов загрузки.
Главным преимуществом промисов перед старыми колбэками является их способность к цепочкам или чэйнингу. Вы можете вызывать метод then() последовательно, передавая результат одной асинхронной операции на вход следующей. Это позволяет писать чистый, плоский и легко читаемый код, полностью избегая проблемы глубокой вложенности функций.