Sobes.tech
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.