Promise a async / await jsou nové funkce v JavaScriptu, které vám umožní pracovat s asynchronními operacemi pohodlnějším a srozumitelnějším způsobem. Tyto koncepty přišly do jazyka, aby se vypořádaly s problémem, který asynchronita způsobuje – složitostí řízení a zpracování výsledků asynchronních operací.
Ve světě JavaScriptu může mnoho operací nějakou dobu trvat-načítání souborů, odesílání požadavků na server, provádění asynchronního kódu atd. místo toho, aby JavaScript blokoval provádění celého kódu po dobu provádění takových operací, je postaven na principu neblokující asynchronní práce.
Obvykle, když se provede asynchronní operace, JavaScript nečeká na její dokončení, ale okamžitě přejde na další. Výsledek asynchronní práce tedy není okamžitě k dispozici, ale je k dispozici později. A tady přicházejí na pomoc Promise a async / await.
Promise, async/await: základní principy práce
Princip fungování Promise je následující:
- Vytvoření Promise: je vytvořena nová instance Promise, která přijímá funkci vykonavatel (executor) se dvěma argumenty: resolve a reject.
- Provedení operace: v rámci funkce vykonavatele se provádí asynchronní operace. V případě úspěšného provedení operace je povolána funkce resolve, která jí sděluje výsledek operace. V případě chyby je vyvolána funkce reject tím, že jí předáte objekt chyby.
- Zpracování výsledku: po provedení operace může být Promise V jednom ze tří stavů: čekání (pending), splněno (fulfilled) nebo zamítnuto (rejected). V závislosti na stavu Promise jsou povolány příslušné obslužné rutiny, které lze nastavit pomocí metod then (pro zpracování úspěšného výsledku) a catch (pro zpracování chyby).
async/await - je to syntaktický cukr pro práci s asynchronním kódem představený v Ecmascriptu 2017. Umožňuje psát asynchronní kód do série a má jednodušší strukturu než použití Promise.
Princip fungování async/await:
- Oznámení asynchronní funkce: funkce, která používá klíčové slovo async, se stává asynchronní a může obsahovat příkazy await.
- Použití operátora await: operátor await pozastaví provádění asynchronní funkce, dokud nebude Promis proveden s výsledkem nebo odmítnut s chybou. Hodnota vrácená operátorem await bude výsledkem promise.
- Zpracování výsledku: výsledek operace vrácený z promisu lze uložit do proměnné pro další práci nebo použít přímo v kódu asynchronní funkce.
Použití Promise a async/await umožňuje pohodlnější práci s asynchronním kódem, díky čemuž je čitelnější a podporovanější. Jsou to Výkonné nástroje pro vývoj aplikací, které vyžadují asynchronní provádění operací a zpracování výsledků.
Promise a asynchronita: co to je a jak to funguje?
Práce s promisy je obzvláště užitečná, když potřebujete provádět operace, které trvají dlouho, jako jsou dotazy na server nebo čtení velkého souboru. Místo blokování provádění programu a čekání na dokončení operace lze použít Promis a pokračovat v dalších úkolech, dokud nebude operace dokončena.
Promisy mají tři stavy-čekání (pending), splněno (fulfilled) a zamítnuto (rejected). Když je Promis vytvořen, je ve stavu čekání, poté může být proveden nebo zamítnut v důsledku asynchronní operace.
Promis je vytvořen pomocí konstruktoru Promise:
const promise = new Promise((resolve, reject) =>/ выполнение асинхронной операции. if (успех) else >);
Uvnitř konstruktoru Promise je přenášena funkce, která obsahuje asynchronní operaci. V rámci této funkce je nutné zavolat buď funkci resolve s výsledkem úspěšného provedení operace, nebo funkci reject s chybou, pokud operace selže.
Když je Promis proveden, můžete k němu pomocí metod připojit obslužnou rutinu .pak () a .catch() . Metoda .pak () se zavolá, když je Promis úspěšně proveden, a vrátí výsledek operace a metoda .catch() je vyvolán, když je Promis zamítnut a vrátí chybu.
Příklad použití Promis:
function getData() , 2000);>);>getData().then((result) => ).catch((error) => );