Обещание в JavaScript | Часть 2: Создание обещания

Понимание JavaScript();

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

Что? вы еще не читали часть 1, читайте здесь. Часть 1 рассказывает о том, что такое обещание, о некоторых преимуществах и о том, как и где оно используется. Это всего 7 минут чтения.

Создание обещания

  • Чтобы создать промис в JavaScript, нам нужно использовать ключевое слово new и конструктор Promise.

  • Конструктор промисов принимает функцию обратного вызова и имеет в качестве параметров два метода: разрешение и отклонение.
  • это связано с тем, что обещание может иметь только два состояния: либо обещание будет разрешено, либо оно будет отклонено.
  • предположим, что мы извлекаем userData из API, имитируем его и добавляем фиктивный объект.
  • если ваша операция выборки прошла успешно, мы можем использовать метод resolve() для разрешения обещания, разрешение примет данные в качестве параметра, который мы хотим вернуть из обещания, например: resolve(userData).
  • если у вашей операции выборки возникли проблемы и данные по какой-либо причине не получены, мы можем использовать метод reject() для возврата ошибки, это называется отклонением обещания, например: reject(error).
  • В конце концов, нам нужно вернуть обещание потребителям.

Потребление обещания

  • мы можем использовать любое обещание, используя метод .then(), предоставляемый Promise API в JavaScript, подробнее о использовании обещания здесь.

Цепочка обещаний

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

  • вы можете сказать: «Это жульничество, вы только сказали, что без оператора возврата цепочка обещаний не будет выполняться дальше, и теперь вы не пишете никаких операторов возврата».

  • нет, мой друг, я не лгу и не обманываю вас, этот код просто написан в формате ES6, где вам не нужно использовать оператор возврата, если вы пишете свой код в одну строку, он будет автоматически справиться с этим. Подробнее о ES6 здесь.
  • сначала нам нужно получить пользователя, используя fetchUser(), который возвращает обещание, и на основе пользователя нам нужно получить друзей пользователя, используя для этого fetchUserFriends() нам нужно связать промисы, используя метод .then() API промисов.
  • как только друзья пользователя получены, нам нужно отправить подарки этим друзьям, мы будем использовать тот же метод .then(), чтобы связать обещание и завершить операцию.
  • вам может быть интересно, что, если что-то сломается между ними.

Это мой код, который никогда не сломается 😒 не верьте мне 😏. Расслабься, шучу 😅 😆 даже гугл код ломает кто я такая, чтобы быть такой уверенной?

Обработка ошибок в Promise

  • что, если некоторые обещания будут отклонены? какой будет эффект?
  • скажем, отправка подарков Promise отправляет отказ из-за какого-то внутреннего сбоя. (не разрешается, выполняется часть отклонения)

  • Он выдаст какую-то ошибку, подобную этой, с надписью «Не пойманный (в обещании) Ошибка отправки подарков».
  • он говорит, что это Uncaught, в пользовательской консоли произойдет сбой, и пользователь ничего не увидит на странице, если загрузка страницы или какой-либо части страницы зависит от этого обещания, потому что обещание не обрабатывается должным образом.
  • используя .then(), мы позаботились о хороших частях (используя промис), но забыли обработать плохую часть.
  • мы можем использовать метод .catch(), предоставляемый API промиса, для обработки/отлова ошибок/отклонений, которые могут возникнуть в промисе.

  • если ошибки/отказы обрабатываются должным образом, мы можем легко показать ошибку на странице, что подарки не были отправлены вашим друзьям или кому-то еще. (у меня нет таких друзей, которые присылают мне подарки 😞 при желании можно 😬)
  • подождите, подождите, подождите, я хочу поделиться с вами интересной вещью о .catch(). Держу пари, вы, возможно, слышали о ней, но никогда не использовали .catch() таким образом.
  • мы можем использовать .catch() на любом уровне использования обещания в цепочке обещаний, да, вы не ослышались, мы можем использовать .catch() после первой цепочки или вторая цепочка или в обоих местах, это полностью ваше желание.

  • мы обрабатываем отклонение обещания fetchUserFriends() на следующем уровне цепочки после его использования.
  • если обещание fetchUserFriends() терпит неудачу, обещание sendGift() все равно будет использовано и выполнено, независимо от того, были получены друзья пользователя или нет.
  • ya ya, вы можете подумать о том, кому будут отправлены эти подарки, если друзья пользователя не будут получены. Он сошел с ума или что?
  • Обычно мы не используем .catch() таким образом, этот пример был просто для объяснения концепции. Как разработчик, вы обязаны использовать .catch() в правильном месте.

.окончательно()

  • есть еще один метод с именем .finally(), предоставляемый API обещаний в JavaScript.
  • как следует из названия, это называется в конце «наконец-то, наконец-то зовут 😅» да-да, я знаю, что это было отстойно, но, пожалуйста, потерпите меня.
  • этот метод .finally() используется в конце цепочки промисов, это похоже на завершающий метод.
  • например, после выполнения любой операции, такой как получение пользователя, получение друзей пользователя и отправка им подарков, рекомендуется закрыть соединение с БД.
  • Соединение с БД должно быть закрыто независимо от того, разрешены ли все обещания или какое-либо из них отклонено, поэтому вы можете закрыть соединение с БД в блоке finally().
  • вы можете сравнить его с механизмом сборки мусора в любом языке программирования, после завершения любой задачи или операции сборка мусора вступает в игру.

  • вывод .finally(), когда все промисы разрешены.

  • вывод .finally(), когда любое из обещаний отклонено.

  • вывод .finally() печатается в конце, независимо от того, разрешены или отклонены все промисы.

можно так долго не сосредотачиваться, но ты классный 😎, если я попытаюсь объяснить еще несколько тем в этом же рассказе, тебе станет скучно.

Итак, на этом история закончилась. До встречи в следующей статье, посвященной «некоторым полезным методам промисов | последняя часть» 😎 после этой строчки я чувствую себя режиссером фильма «последняя часть 😅»

следите за последней главой обещания, а до тех пор выпейте кофе ☕️.

что? вы хотите отправить мне подарок 🎁 😃 пожалуйста, не стесняйтесь, но перед этим испачкайте руки, практикуя вышеперечисленные концепции.