Middle
Ako komunikujete s slučajom udaljenosti (event loop)?
sobes.tech AI
Odpoveď od AI
Nepohranične ne interagujem s cyklom udalostí, pretože je to interná mechanika JavaScriptového motora (napríklad V8 v Node.js a prehliadačoch). Môj zásah je nepriame, cez asynchrónne operácie.
Hlavné kontaktné body:
- Časovače:
setTimeout,setInterval. Tieto ukladajú úlohy do fronty callbackov, ktoré budú vykonané cyklom udalostí po uplynutí času. - Promises:
Promise. Ich metódy (then,catch,finally) registrujú callbacky, ktoré sa vykonávajú asynchrónne v mikroúlohách cyklu udalostí. - Asynchrónne vstupno-výstupné operácie: Žiadosti na server (
fetch,XMLHttpRequest), práca so súborovým systémom v Node.js. Ich dokončenie spôsobí zaradenie príslušných callbackov do fronty makro alebo mikro úloh. - Obsluhovače udalostí DOM:
addEventListener. Callbacky obsluhovačov sa vykonávajú, keď cyklus udalostí spracováva udalosť, ktorá nastala v DOM.
Príklad použitia promises pre asynchrónnu operáciu:
// Asynchrónna funkcia
async function fetchData(url) {
try {
const response = await fetch(url); // Asynchrónna operácia
if (!response.ok) {
throw new Error(`HTTP chyba: ${response.status}`);
}
const data = await response.json(); // Asynchrónna operácia
return data;
} catch (error) {
console.error('Chyba pri získavaní dát:', error);
throw error; // Znovu hádzať
}
}
// Volanie asynchrónnej funkcie a spracovanie výsledku
fetchData('https://api.example.com/data')
.then(data => {
console.log('Prijaté dáta:', data); // Tento callback bude asynchrónne vykonaný
})
.catch(error => {
console.error('Vyskytla sa chyba:', error); // Tento callback bude vykonaný pri chybe
});
console.log('Tento kód sa vykoná PRED dokončením asynchrónnych operácií.'); // Synchronous code
Pochopenie toho, ako funguje event loop, mi pomáha písať nek blokujúci kód, efektívne riadiť asynchrónne operácie a vyhýbať sa "zamrznutiu" používateľského rozhrania. Beriem do úvahy, že dlhé synchronné operácie blokujú hlavný vlákno a event loop, preto sa ich snažím vyhýbať alebo presunúť do web workerov.