Промисы в JavaScript ES6/ES2015

Промисы – это функция, которая появилась впервые в спецификации JavaScript ES6 (ES2015). Промисы существенно упрощают работу с асинхронным кодом без преобразования в несколько уровней функций обратного вызова. Именно благодаря промисам мы можем навсегда попрощаться с адом обратного вызова.

Базовый промис объявляется вот так.

let myPromise = new Promise((resolve, reject) => {
let data;
setTimeout(() => {
data = "Some payload";
if (data) {
resolve(data);
} else {
reject();
}

Обычно после него вызывается что-то асинхронное, например, внешний API. Здесь мы моделируем подобную ситуацию с помощью функции setTimeout.

Обратите внимание, новый промис инициируется с двумя функциями в качестве аргументов: одна функция предназначена для успешного выполнения промиса, а вторая – для ошибки. А вот как можно вызвать промис, чтобы получить из него данные о полезной нагрузке:

myPromise.then(data => {
console.log('Received: ' + data);
}).catch(() => {
console.log("There was an error");
});

Приведенное выше код выведет в консоль следующее:

Received: Some payload

Если данные не были получены, в консоли будет следующее:

There was an error

Цепочки промисов

Промисы также можно объединять в цепочку с помощью функций then. Значение, возвращаемое предыдущей функцией then, становится значением, доступным следующей функции, и так по цепочке:

myPromise.then(data => {
console.log('Received: ' + data);
let moreData = "Another payload";
return moreData;
}).then(data => {
console.log(data);
}).catch(() => {
console.log("There was an error");
});

В консоли будет такой вывод:

Received: Some payload
Another payload

Tags: , , ,

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