Middle
Povedz mi o princípoch asynchrónnosti v JavaScript.
sobes.tech AI
Odpoveď od AI
Princípy asynchrónnosti v JavaScripte sú založené na jednovláknovom modeli vykonávania, kde úlohy, ktoré môžu trvať dlhší čas (napríklad sieťové požiadavky, časovače), neblokujú hlavný vlákno vykonávania, čo umožňuje vykonávať iné akcie. To sa dosahuje pomocou:
- Event Loop (Event Loop): Mechanizmus, ktorý neustále kontroluje front správ a vykonáva úlohy z neho. Keď asynchrónna operácia skončí, jej callback sa umiestni do frontu úloh.
- Callback Functions (Funkcie spätného volania): Funkcie, ktoré sa odovzdávajú ako argument inej funkcie a vykonávajú sa po dokončení asynchrónnej operácie.
- Promises (Sľuby): Objekt, ktorý predstavuje konečnú hodnotu asynchrónnej operácie, ktorá môže byť buď úspešne splnená (resolved), alebo zamietnutá (rejected). Uľahčujú prácu s asynchrónnym kódom, umožňujúc vyhnúť sa "callback hell".
- Async/Await: Syntaxový cukor nad promises, ktorý umožňuje písať asynchrónny kód v čitateľnejšom, synchronizovanom štýle. Funkcie označené
asyncvždy vracajú promise. Operátorawaitsa môže použiť iba vo vnútriasyncfunkcií a pozastavuje vykonávanie, kým sa promise nevykoná.
Porovnanie prístupov:
| Prístup | Čitateľnosť | Spracovanie chýb | Paralelné vykonávanie |
|---|---|---|---|
| Callbacks | Nízka | Zložité | Môže byť neintuitívne |
| Promises | Stredná | Pohodlné | .all(), .race() |
| Async/Await | Vysoká | Pohodlné (try/catch) | Trochu zložitejšie |
Príklad použitia promises:
fetch('/api/data') // Asynchrónna operácia
.then(response => response.json()) // Spracovanie úspešného vykonania
.then(data => console.log(data)) // Spracovanie dát
.catch(error => console.error('Chyba:', error)); // Spracovanie chyby
Príklad použitia Async/Await:
async function fetchData() {
try {
const response = await fetch('/api/data'); // Čakanie na promise
const data = await response.json(); // Čakanie na promise
console.log(data);
} catch (error) {
console.error('Chyba:', error); // Spracovanie chyby
}
}
fetchData();