Middle
Pověz mi o principech asynchronnosti v JavaScriptu.
sobes.tech AI
Odpověď od AI
Principy asynchronnosti v JavaScriptu jsou založeny na modelu jednolinkového provádění, kde úkoly, které mohou zabrat značné množství času (například síťové požadavky, časovače), nezablokují hlavní vlákno, což umožňuje vykonávat jiné akce. Toho se dosahuje pomocí:
- Event Loop (Směčka událostí): Mechanismus, který neustále kontroluje frontu zpráv a vykonává úkoly z ní. Když asynchronní operace skončí, její callback je umístěn do fronty úkolů.
- Callback funkce: Funkce předávané jako argumenty jiným funkcím a vykonávané po dokončení asynchronní operace.
- Promises (Slíbení): Objekty, které představují konečnou hodnotu asynchronní operace, jež může být úspěšně (fulfilled) nebo odmítnuta (rejected). Usnadňují práci s asynchronním kódem, vyhýbají se "callback hell".
- Async/Await: Syntaktický cukr nad promises, který umožňuje psát asynchronní kód v přehlednějším, synchronním stylu. Funkce označené
asyncvždy vracejí promise. Operátorawaitlze použít pouze uvnitřasyncfunkcí a pozastavuje provádění, dokud promise není vyřešena.
Porovnání přístupů:
| Přístup | Čitelnost | Zpracování chyb | Paralelní provádění |
|---|---|---|---|
| Callbacks | Nízká | Složitá | Může být ne-triviální |
| Promises | Střední | Pohodlné | .all(), .race() |
| Async/Await | Vysoká | Pohodlné (try/catch) | Trochu složitější |
Příklad použití promises:
fetch('/api/data') // Asynchronní operace
.then(response => response.json()) // Úspěšné zpracování
.then(data => console.log(data)) // Zpracování dat
.catch(error => console.error('Chyba:', error)); // Zpracování chyb
Příklad použití Async/Await:
async function fetchData() {
try {
const response = await fetch('/api/data'); // Čekání na promise
const data = await response.json(); // Čekání na promise
console.log(data);
} catch (error) {
console.error('Chyba:', error); // Zpracování chyb
}
}
fetchData();