Sobes.tech
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é async vždy vracejí promise. Operátor await lze použít pouze uvnitř async funkcí 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();