Sobes.tech
Middle

Jak pracujete s asynchronním JavaScriptem?

sobes.tech AI

Odpověď od AI

Pracuji s asynchronními operacemi v JavaScriptu pomocí callbacků, promise a async/await.

Callbacky jsou funkce předávané jiným funkcím jako argumenty a jsou vykonány po dokončení nějaké operace. Mohou vést k "pekelu callbacků" při vnoření.

// Příklad callbacku
function fetchData(callback) {
  setTimeout(() => {
    callback("Data přijata");
  }, 1000);
}

fetchData((data) => {
  console.log(data); // Vypíše "Data přijata" po 1 sekundě
});

Promise jsou objekty, které představují konečné dokončení nebo selhání asynchronní operace. Umožňují jednodušší práci s asynchronním kódem, vyhýbají se hluboké vnořenosti. Mají tři stavy: pending (čekající), fulfilled (splněno), rejected (zamítnuto).

// Příklad promise
function fetchDataPromise() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve("Data přijata");
    }, 1000);
  });
}

fetchDataPromise()
  .then((data) => {
    console.log(data); // Vypíše "Data přijata" po 1 sekundě
  })
  .catch((error) => {
    console.error("Chyba:", error);
  });

Async/await je syntaktický cukr nad promise, který činí asynchronní kód čitelnějším, podobným synchronnímu. Funkce označená async vždy vrací promise. Operátor await lze použít pouze uvnitř async funkce a pozastaví provádění, dokud promise není vyřešena nebo zamítnuta.

// Příklad async/await
async function fetchDataAsync() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve("Data přijata");
    }, 1000);
  });
}

async function processData() {
  try {
    const data = await fetchDataAsync();
    console.log(data); // Vypíše "Data přijata" po 1 sekundě
  } catch (error) {
    console.error("Chyba:", error);
  }
}

processData();

Často používám async/await při práci s API požadavky, protože je to nejpohodlnější a nejčitelnější způsob zpracování asynchronních operací. Pro paralelní provádění více asynchronních operací používám Promise.all() nebo Promise.allSettled().

Používám event loop k pochopení pořadí provádění asynchronního kódu, mikroúkolů a makroúkolů.