Правильное понимание промисов в JavaScript
## Photo by rawpixel on Unsplash##
Поделитесь этой статьей в LinkedIn!
Оригинальная статья о средний
Нажмите здесь, чтобы поделиться этим постом на Linkedin!
Почти каждый, кто использовал JavaScript, в какой-то момент испытывал к нему любовь или ненависть. JavaScript похож на ту девушку, которая временами расстраивает, но в ней есть что-то, что нас интригует. В JavaScript есть множество интересных тем и концепций для изучения. Начнем с одного из них- Обещания.
Точно так же ни один фильм о Человеке-пауке не обходится без диалога. С большой силой приходит большая ответственность.
Ни одна статья, основанная на промисах, не будет полной без утверждения, что промисы спасают вас от ада обратных вызовов.
Но это еще не все обещания, и я покажу это вам.
JavaScript — это синхронный язык программирования, но благодаря функциям обратного вызова мы можем заставить его работать как язык асинхронного программирования.
Обещания
Обещания в javascript очень похожи на обещания, сделанные в реальной жизни.
Определение обещания – 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("…"));
});
Как видно, промисы не возвращают значения сразу. Он ждет успеха или неудачи, а затем возвращается соответственно. Это позволяет асинхронным методам возвращать значения, аналогичные синхронным. Вместо того, чтобы сразу возвращать значения, асинхронные методы предоставляют обещание вернуть значение.
Приведенный выше абзац проясняет одну вещь: у него есть состояния!
Обещание может быть одним из этих состояний:
в ожидании— Это начальное состояние или состояние во время выполнения промиса. Ни выполнено, ни отвергнуто.
выполненный— Обещание сбылось.
отклоненный— Обещание не выполнено.
Состояния говорят сами за себя, поэтому не будем вдаваться в подробности. Вот скриншот для справки.
Обработка и использование обещания
В предыдущем разделе мы видели, как создаются промисы, теперь давайте посмотрим, как можно использовать промисы.
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. Промисы могут сделать гораздо больше, если их использовать правильно и в правильном месте.
Надеюсь, вам понравилось читать. Следуй за мной на Твиттер && Середина
Оригинальная статья о средний
👏👏👏👏👏👏👏