V tomto tutoriálu se na příkladech dozvíte o slibech JavaScriptu a řetězení slibů.
V JavaScriptu je slib dobrým způsobem, jak zvládnout asynchronní operace. Slouží ke zjištění, zda je asynchronní operace úspěšně dokončena nebo ne.
Slib může mít jeden ze tří stavů.
- čekající
- Splněno
- Odmítnuto
Slib začíná v nevyřízeném stavu. To znamená, že proces není dokončen. Pokud je operace úspěšná, proces končí ve splněném stavu. A pokud dojde k chybě, proces končí v odmítnutém stavu.
Když například požadujete data ze serveru pomocí příslibu, budou ve stavu čekající na vyřízení. Když data dorazí úspěšně, budou ve splněném stavu. Pokud dojde k chybě, bude v odmítnutém stavu.
Vytvořte slib
K vytvoření objektu slibu použijeme Promise()
konstruktor.
let promise = new Promise(function(resolve, reject)( //do something ));
Promise()
Konstruktor vezme funkci jako argument. Funkce také přijímá dvě funkce resolve()
a reject()
.
Pokud se slib úspěšně vrátí, je resolve()
funkce volána. A pokud dojde k chybě, reject()
funkce je volána.
Předpokládejme, že níže uvedený program je asynchronní program. Poté lze program zpracovat pomocí příslibu.
Příklad 1: Program se slibem
const count = true; let countValue = new Promise(function (resolve, reject) ( if (count) ( resolve("There is a count value."); ) else ( reject("There is no count value"); ) )); console.log(countValue);
Výstup
Promise (: „There is a count value.“)
Ve výše uvedeném programu Promise
je vytvořen objekt, který přebírá dvě funkce: resolve()
a reject()
. resolve()
se používá, pokud je proces úspěšný, a reject()
používá se, když dojde k chybě v příslibu.
Slib je vyřešen, pokud je hodnota count pravdivá.

Zřetězení slibů JavaScriptu
Sliby jsou užitečné, když musíte zvládnout více než jeden asynchronní úkol, jeden po druhém. K tomu používáme řetězení slibů.
Můžete provést operaci poté, co slib je vyřešen použitím metod then()
, catch()
a finally()
.
Metoda JavaScript then ()
then()
Metoda se používá spolu s zpětné volání, je-li slib úspěšně splnila nebo vyřešeny.
Syntaxe then()
metody je:
promiseObject.then(onFulfilled, onRejected);
Příklad 2: Řetězení slibu pomocí then ()
// returns a promise let countValue = new Promise(function (resolve, reject) ( resolve('Promise resolved'); )); // executes when promise is resolved successfully countValue.then( function successValue(result) ( console.log(result); ), ) .then( function successValue1() ( console.log('You can call multiple functions this way.'); ), );
Výstup
Slib vyřešen Takto můžete volat více funkcí.
Ve výše uvedeném programu se then()
metoda používá k řetězení funkcí k příslibu. then()
Metoda se nazývá, je-li slib úspěšně vyřešen.
S then()
příslibem můžete zřetězit více metod.
Metoda JavaScript catch ()
catch()
Metoda se používá spolu s zpětné volání, je-li slib zamítnuta nebo pokud dojde k chybě. Například,
// returns a promise let countValue = new Promise(function (resolve, reject) ( reject('Promise rejected'); )); // executes when promise is resolved successfully countValue.then( function successValue(result) ( console.log(result); ), ) // executes if there is an error .catch( function errorValue(result) ( console.log(result); ) );
Výstup
Slib odmítnut
Ve výše uvedeném programu je slib odmítnut. A catch()
metoda se používá se slibem, že chybu vyřeší.

Slib JavaScript versus zpětné volání
Promises are similar to callback functions in a sense that they both can be used to handle asynchronous tasks.
Funkce zpětného volání JavaScriptu lze také použít k provádění synchronních úkolů.
Jejich rozdíly lze shrnout do následujících bodů:
Slib JavaScript
- Syntaxe je uživatelsky přívětivá a snadno čitelná.
- Zpracování chyb je snazší spravovat.
- Příklad:
api (). then (function (result) (return api2 ();)). then (function (result2) (return api3 ();)). then (function (result3) (// do work)). catch ( function (error) (// zpracovat jakoukoli chybu, která může nastat před tímto bodem));
Zpětné volání JavaScriptu
- Syntaxi je těžké pochopit.
- Zpracování chyb může být obtížné spravovat.
- Příklad:
api (function (result) (api2 (function (result2) (api3 (function (result3) (// do work if (error) (// do something) else (// do something))))))))) ;
Metoda JavaScript konečne ()
Tuto finally()
metodu můžete také použít se sliby. finally()
Metoda dostane popraven, když slib buď úspěšně vyřešeny, nebo zamítnuta. Například,
// returns a promise let countValue = new Promise(function (resolve, reject) ( // could be resolved or rejected resolve('Promise resolved'); )); // add other blocks of code countValue.finally( function greet() ( console.log('This code is executed.'); ) );
Výstup
Tento kód je spuštěn.
Metody slibu JavaScriptu
Objekt Promise má k dispozici různé metody.
Metoda | Popis |
---|---|
all(iterable) | Čeká na vyřešení všech slibů nebo na odmítnutí kteréhokoli z nich |
allSettled(iterable) | Počkejte, až budou všechny sliby vyřešeny nebo odmítnuty |
any(iterable) | Vrátí hodnotu slibu, jakmile je některý ze slibů splněn |
race(iterable) | Počkejte, až bude některý ze slibů vyřešen nebo odmítnut |
reject(reason) | Vrátí nový objekt Promise, který je z daného důvodu odmítnut |
resolve(value) | Vrátí nový Promise objekt, který je vyřešen s danou hodnotou |
catch() | Připojí zpětné volání obslužné rutiny odmítnutí |
then() | Připojí vyřešené zpětné volání obslužné rutiny |
finally() | Připojí obsluhu k příslibu |
Chcete-li se dozvědět více podrobností o slibech, navštivte JavaScript Promises.