001 Введение в промисы
Промисы позволяют выполнять задачи, на которые ещё сервер не успел дать ответ. JS код сможет выполнять определённые действия, пока выполняется другая задача
Так же у промиса есть три состояния:
- Ожидание выполнения (промис создан)
- Промис исполнен (вернул результат)
- Отклонён (вернул ошибку)
002 Создание и использование промисов
При создании промиса, он находится в режиме pending
(ожидание). В сам промис мы передали в виде аргументов две функции, одну из которых нужно вызвать в самом промисе (resolve
– задача решена, reject
– вышла ошибка)
Получить значение из промиса можно через методы .then().catch()
. Первый возвращает значение в результате успешного выполнения, второй выполняется результате ошибки. Внутрь данных методов мы вкладываем колбэк функции. В качестве аргумента функции (then()
) выступает значение resolve
, которое было вложено в сам промис
003 Использование промисов в fetch
Когда мы посылаем запрос через fetch
, то пока мы не получим ответ от сервера, промис будет оставаться в режиме pending
. После получения ответа у нас срабатывает один из методов, которые мы подцепили к фетчу. Они выполняются по цепочке: выполняется сначала первый then()
, а затем уже второй (тут возвращается JSON и второй метод выводит данный формат)
Так же метод json возвращает промис, так как компьютеру нужно время, чтобы распарсить полученные значения от сервера
Так же есть сайт, который позволяет получить JSON-данные
004 Практика по использованию промисов и fetch
Сама по себе функция fetch()
возвращает промис, а не результат, поэтому требуется использовать для получения результата then()
Так же если мы будем выполнять инструкции, то нам понадобится вписывать в стрелочную функцию ещё и «{}
», что потребует от нас явного возвращения результата
Так же нужно упомянуть, что в старых версиях node нет функции fetch
(там для такого же функционала использовались другие функции и npm-пакеты)
005 Практика с отклонением промисов
Тут можно имитировать отключение интернета
И вот мы видим ошибку от нашего промиса (нет возможности отправить запрос браузеру)
006 Вызов fetch внутри промиса
Уже тут пошёл пример создания своего промиса, который упростит работу с фетчем. Тут мы сделали стрелочную функцию, которая неявно будет возвращать созданный внутри промис, который внутри имеет фетч, который в свою очередь будет получать данные от сервера. И далее в любом месте программы можем вызвать данную функцию