Promise

Promise - об'єкт JavaScript для сторення асинхроних операцій.

Синтаксис:

new Promise( function(resolve, reject){ /* код який виконується при створені Promise */ } );

Параметри:

resolve - параметр який отримує функцію яка виконується коли необхідно повернути результат (Promise виконався).

reject - параметр який приймає функцію яка виконується коли виникла помилка (Promise провалився).

Опис:

Promise (обіцянки) це об'єкт який дозволяє виконувати асинхроно код у JavaScript.

Це досить нова технологія яка дозволяє код виконувати асинхроно і яку не підтримують старі браузери.

JavaScript виконується в однопоточному режимі і на відміно від інших мов програмування у JavaScript немає можливості створювати потоки для виконання асинхроних операцій. Натомість у JavaScript є асинхроні функції які виконуються після настання події. Тому асинхроність у JavaScript відрізняється від асинхроності у інших мовах програмування.

У JavaScript Promise це результат операції, яка ще не завершена, але буде завершена у майбутньому.

Простий приклад застосування Promise:

var bol=true; var obj=new Promise( function(res, erro){ if(bol==true) res(true); else erro(false); }); obj.then( function(a){alert(a);}, function(b){alert(b);} );

Створюємо для зручності функцію яка повертає Promise:

function obj(bol){ return new Promise( function( resolve , reject ){ if(bol==true) resolve(true); else reject(false); }); } obj(true).then(function(a){alert(a);}, function(b){alert(b);});

У вище вказаному коду створюється об'єкт Promise, який перевіряє зміну bol на логічне значення. При виклику методу then передаються дві функції в якості параметру. Якщо bol дорівнює true то виконується перша функція resolve, якщо дорівнює false то виконується друга функція reject. Це примітивний спосіб показати як працює Promise.

Також Promise можуть бути зв'язані ланцюжком:

Приклад:

Приклад виконання коду через вказаний час на основі Promise:

function sleep(ms){ return new Promise(function(resolve){ window.setTimeout(resolve, ms); }); } sleep(3000).then(function(){alert("пройшло 3 секунди!");});