Правильное понимание промисов в JavaScript

                         ## Photo by rawpixel on Unsplash## 

Поделитесь этой статьей в LinkedIn!
Оригинальная статья о средний
Нажмите здесь, чтобы поделиться этим постом на Linkedin!
Почти каждый, кто использовал JavaScript, в какой-то момент испытывал к нему любовь или ненависть. JavaScript похож на ту девушку, которая временами расстраивает, но в ней есть что-то, что нас интригует. В JavaScript есть множество интересных тем и концепций для изучения. Начнем с одного из них- Обещания.

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

Но это еще не все обещания, и я покажу это вам.

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

Обещания
Обещания в javascript очень похожи на обещания, сделанные в реальной жизни.

1_UcJSj8vyeAB_zgojmACsKw.png
Определение обещания – Google
После того, как обещание дано, мы получаем уверенность в «чем-то» и можем соответствующим образом планировать.
Их можно сохранить или сломать.
Мы не можем действовать по ним немедленно. Только после того, как обещание выполнено.
Согласно МДН:

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

Игра с промисами состоит из 2 частей:

Создание обещаний
Обработка обещаний

Творчество
Обещания имеют базовый план

new Promise( /* executor */ function(resolve, reject) { ... } );
                                                               --MDN

Исполняющая функция (исполнитель) принимает два параметра разрешения и отклонения, которые, в свою очередь, являются функциями обратного вызова. Промисы используются для обработки асинхронных операций, также называемых блокирующим кодом, примерами которых являются вызовы БД, ввода-вывода или API, выполняемые функцией-исполнителем. Как только это завершится, он либо вызовет функцию разрешения в случае успеха, либо функцию отклонения в случае ошибки.

Простой пример

let promise = new Promise(function(resolve, reject) {
if(promise_kept)
  resolve("done");
else
  reject(new Error("…"));
  
});

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

Приведенный выше абзац проясняет одну вещь: у него есть состояния!

Обещание может быть одним из этих состояний:

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

Состояния говорят сами за себя, поэтому не будем вдаваться в подробности. Вот скриншот для справки.
1_JaE8Vjaa4J3GF50xHl8B5A.png

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

const isDone = new Promise()
//...

const checkIfDone = () => {
  isDone
    .then(ok => {
      console.log(ok)
    })
    .catch(err => {
      console.error(error)
    })
}

Запуск .checkIfDone() выполнит обещание isDone() и будет ждать его разрешения, используя тогда обратный вызов. Если есть ошибка, она будет обработана в блоке catch.

Цепочка обещаний
Промис можно вернуть другому промису, создав цепочку промисов. Если один терпит неудачу, все остальные тоже. Цепочка очень эффективна в сочетании с Promise, поскольку она дает нам контроль над порядком событий в нашем коде.

new Promise(function(resolve, reject) {

  setTimeout(() => resolve(1), 1000); 

}).then(function(result) { 

  alert(result); 
  return result * 3;

}).then(function(result) { 

  alert(result); 
  return result * 4;

}).then(function(result) {

  alert(result); 
  return result * 6;

});

Все операции возвращают результаты следующей функции then() при разрешении, и этот процесс продолжается до тех пор, пока цепочка не будет завершена. Последний элемент в цепочке возвращает окончательный результат.

Вывод
Это был всего лишь основной смысл промисов JavaScript. Промисы могут сделать гораздо больше, если их использовать правильно и в правильном месте.
Надеюсь, вам понравилось читать. Следуй за мной на Твиттер && Середина
Оригинальная статья о средний

👏👏👏👏👏👏👏

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *