Sobes.tech
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é async vždy vracajú promise. Operátor await sa môže použiť iba vo vnútri async funkcií 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();