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ů.