Obsah
Klíčové slovo Await
Klíčové slovo `await` (z anglického počkat) je moderní programovací konstrukt, který se používá v kombinaci s asynchronními funkcemi (`async`). Jeho hlavním úkolem je zastavit provádění konkrétního asynchronního bloku kódu do chvíle, než vrátí výsledek nějaká zdlouhavá operace (např. stahování dat ze sítě, dotaz do databáze nebo čtení souboru), aniž by přitom zablokovalo celé hlavní vlákno aplikace.
Jak await funguje pod pokličkou?
V tradičním synchronním programování program čeká na dokončení operace tzv. blokujícím způsobem – procesor stojí a nic jiného nedělá. S použitím `async/await` se proces chová následovně:
| Fáze | Popis |
|---|---|
| 1. Volání operace | Asynchronní funkce narazí na klíčové slovo `await` před operací, která vrací tzv. `Promise` (nebo odpovídající budoucí hodnotu). |
| 2. Pozastavení (Suspend) | Provádění aktuální funkce je bezpečně pozastaveno a řízení se vrací nadřazenému procesu (např. event loop). Vlákno může mezitím zpracovávat jiné úkoly. |
| 3. Obnovení (Resume) | Jakmile asynchronní operace skončí a vrátí data, `await` výsledek rozbalí (vybalí z Promise) a funkce plynule pokračuje dalším řádkem. |
Ukázka syntaxe v praxi
Ačkoliv je chování pod pokličkou asynchronní, díky `await` lze psát kód, který vypadá jako klasický lineární (synchronní) kód. Zde je příklad v JavaScriptu:
async function ziskejDataUzivatele() { try { // Program zde pozastaví běh, dokud fetch server neodpoví const odpoved = await fetch('https://api.example.com/user'); // Další await pro převedení dat na JSON const data = await odpoved.json(); console.log("Uživatel načten:", data.name); } chyt (chyba) { console.error("Chyba při stahování:", chyba); } }
Klíčová pravidla pro používání await
* Vazba na Async: Klíčové slovo `await` lze použít pouze uvnitř funkce, která je předem označená klíčovým slovem `async`. * Top-level await: V některých moderních prostředích (např. v moderním JavaScriptu / ESModules nebo v C#) je povoleno použití `await` i na samotné hlavní úrovni skriptu (mimo funkce). * Zamezení callback hell: `await` elegantně nahrazuje složité řetězení callback funkcí nebo starších objektů typu Promise (`.then().catch()`), čitelnost kódu se tím výrazně zvyšuje.
Podpora v programovacích jazycích
Koncept `async/await` si získal obrovskou popularitu a dnes je standardní součástí celé řady moderních programovacích jazyků:
| Jazyk | Příklad implementace |
|---|---|
| JavaScript / TypeScript | `const vysledek = await operace();` |
| C# | `var vysledek = await OperaceAsync();` |
| Python | `vysledek = await operace()` |
| Rust | `let vysledek = operace().await;` |
Tip: Vždy pamatujte na to, že `await` nezrychluje samotnou operaci (stahování dat pořád trvá např. 2 sekundy). Jeho síla spočívá v tom, že neblokuje procesor, takže aplikace může během těch 2 sekund obsluhovat tisíce dalších uživatelů nebo vykreslovat plynulou animaci v uživatelském rozhraní.
