JavaScript

Промис: что это такое, способы использования, промис JavaScript

Lorem ipsum dolor

Промис, он же «promise» в JavaScript — это объект, который предоставляет результативность удачного или неудачного окончания асинхронной JS-функции. Асинхронная JS-функция — это такой JS-скрипт, который будет выполняться независимо от других скриптов программы. То есть такой скрипт не блокирует исполнение всего кода JavaScript-программы.

При стандартном исполнении кода программы все скрипты исполняются в последовательной структуре, один за другим. В этом случае, если один скрипт «затягивает» с исполнением, тогда вся остальная программа «зависает», так как ожидает исполнения этого скрипта. Скрипт может «затягивать» исполнение по разным причинам. Например:

  • программа испытывает высокие нагрузки,

  • база данных долго не отвечает на запрос,

  • проблемы с сетью,

  • и др.

В итоге «проблемный» скрипт может затормозить все последовательное исполнение программы. Чтобы этого не происходило, в JavaScript внедрен набор полезного инструментария, который исключает «зависание» программ из-за «проблемных» скриптов. Представителями такого полезного инструментария являются промисы JS, о которых мы сегодня немного поговорим.

Промис JavaScript

Промисы JS — это небольшие специализированные JS-скрипты, которые содержат состояние исполнения определенного асинхронного скрипта. Этот специализированный JS-скрипт может определяться одним из трех состояний:

  1. Состояние «pending». Это состояние ожидания, которое означает, что промис активирован, но скрипт еще не завершил свою работу.

  2. Состояние «fulfilled». Это состояние успешного завершения, которое означает, что скрипт успешно завершил работу.

  3. Состояние «rejected». Это состояние ошибки, которое означает, что скрипт, который представлял промис, критически завершил работу с ошибкой.

Как создать промис JavaScript

Промисы JavaScript создаются по единому шаблону:

new Promise(<определитель исполнителя действия>)

Обычно в качестве определителя исполнителя выступает некая асинхронная функция, которая будет выполняться при объявлении промиса. В роли такой функции может выступать:

  • функция, на выполнение которой нужно много времени, поэтому ее делают асинхронной;

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

Пример простого промиса JavaScript:

const examplePromise = new Promise(function() {

   console.log("Пишем промис JS, который следит за исполнением асинхронной функции")

});

 

Это простой пример, где асинхронная функция выведет нам некое уведомление в «консоль». Когда функция будет выполняться, тогда мы и увидим уведомление. Как только мы создали промис, он перешел в состояние «pending» или в «режим ожидания», как его называют программисты.

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

const examplePromise = new Promise(function(resolve, reject) {

   console.log("Пишем промис JS, который следит за исполнением асинхронной функции")

});

 

Мы видим, что в записи функции промиса мы добавили два параметра. Они имеют следующие значения и определения:

  • «resolve» — может принять какое-либо значение, если функция выполнится успешно, поэтому вызывается только после удачного исполнения промис-функции;

  • «reject» — может принять какое-либо значение, если функция окончит выполнение с ошибкой, поэтому вызывается только после неудачного исполнения промис-функции.

Промисы JS: успешное выполнение

При успешном выполнении асинхронной функции мы сможем задать ей параметр «resolve». Его суть показать нам, что функция успешно окончила собственное выполнение. В значении этого параметра может располагаться что угодно. Чтобы показать, как он работает, мы зададим его в виде строки.

Таким образом, наш пример промиса будет выглядеть так:

const examplePromise = new Promise(function(resolve) {

   console.log("Пишем промис JS, который следит за исполнением асинхронной функции");

 

   resolve("Все получилось, Дормидонт!")

     });

 

Если посмотреть внимательно, тогда видно, что функция «resolve()» вызовется только в конце скрипта. В это время наш промис уже будет в состоянии «fulfilled», соответственно, будет ясно, что наша основная асинхронная функция выполнилась успешно.

Промисы JavaScript: неуспешное выполнение

Чтобы выявить ошибку в нашей промис-функции, мы в качестве ее параметра будет использовать «reject». Таким образом, если что-то пойдет не так, сработает функция «reject()». В этом случае наш пример промиса мог бы выглядеть вот так:

const examplePromise = new Promise(function(reject) {

   console.log("Пишем промис JS, который следит за исполнением асинхронной функции");

   

   reject("Дормидонт, все пропало и ничего не работает!")   

 

});

 

Вызов функции «reject()» произойдет в том случае, если промис перейдет в состояние «rejected», а мы, соответственно, будем понимать, что наша асинхронная функция выдает ошибку.

Промис JavaScript: успешное и неуспешное выполнение

Можно использовать параметры асинхронной функции по отдельности в тех случаях, когда нам нужно точно знать об удачном исполнении или о проблеме, возникшей в функции. Однако чаще всего в асинхронных функциях применяют оба параметра: «resolve» и «reject». Просто создают условия, в каких случаях нужно выводить ту или иную функцию.

Наш пример промис мог бы выглядеть вот так:

const examplePromise = new Promise(function(resolve, reject) {

   console.log("Пишем промис JS, который следит за исполнением асинхронной функции");

 

   if(function examplePromise = true) {

      resolve("Все получилось, Дормидонт"")

       }

   

   else{

      reject("Дормидонт, все пропало и ничего не работает!")

       }

 });

 

Заключение

Промис обязательно нужно использовать в тех случаях, когда важно отслеживать выполнение асинхронных функций. А отслеживать их нужно, чтобы понимать, что с ними происходит. Мы показали, как выглядят промисы JS в самых простых примерах. На деле промисы JavaScript в отношении кода будут выглядеть намного сложнее. Промис нужен не столько программе, сколько разработчику, поэтому каждый JS-разработчик должен понимать, как с ними работать.

Схожие статьи

Модули чисел в JavaScript и Node.js и правила работы с ними
JavaScript

Модули чисел в JavaScript и Node.js и правила работы с ними

Наследование методов, агрегация и композиция Java: определение и особенности
JavaScript

Наследование методов, агрегация и композиция Java: определение и особенности

Учебный курс по React, часть 15: практикумы по работе с состоянием компонентов
JavaScript

Учебный курс по React, часть 15: практикумы по работе с состоянием компонентов

Какой язык имеет большую производительность: Javа vs C
JavaScript

Какой язык имеет большую производительность: Javа vs C