Slib JavaScript a řetězení slibů

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 Promiseje 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á.

Fungování slibu JavaScriptu

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ší.

Fungování řetězení slibů JavaScriptu

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

  1. Syntaxe je uživatelsky přívětivá a snadno čitelná.
  2. Zpracování chyb je snazší spravovat.
  3. 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

  1. Syntaxi je těžké pochopit.
  2. Zpracování chyb může být obtížné spravovat.
  3. 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.

Zajímavé články...