Sobes.tech
Middle

Kako komunicirate sa petljom događaja (event loop)?

sobes.tech АИ

Одговор од АИ

Neposredno ne komuniciram sa petljom događaja, jer je to interna mehanika JavaScript motora (na primer, V8 u Node.js i pregledačima). Moja interakcija je indirektna, putem asinhronih operacija.

Glavne tačke kontakta:

  • Tajmeri: setTimeout, setInterval. Oni stavljaju zadatke u red callbackova, koji će biti izvršeni od strane petlje događaja nakon isteka vremena.
  • Obećanja: Promise. Njihove metode (then, catch, finally) registruju callbackove koji se izvršavaju asinhrono u mikrotaskovima petlje događaja.
  • Asinhrone operacije ulaza/izlaza: Zahtevi ka serveru (fetch, XMLHttpRequest), rad sa fajl sistemom u Node.js. Njihovo završavanje izaziva stavljanje odgovarajućih callbackova u red makro ili mikro zadataka.
  • Obrađivači događaja DOM: addEventListener. Callbackovi obrađivača se izvršavaju kada petlja događaja procesuira događaj koji se desio u DOM-u.

Primer korišćenja obećanja za asinhronu operaciju:

// Asinhrona funkcija
async function fetchData(url) {
  try {
    const response = await fetch(url); // Asinhrona operacija
    if (!response.ok) {
      throw new Error(`HTTP greška: ${response.status}`);
    }
    const data = await response.json(); // Asinhrona operacija
    return data;
  } catch (error) {
    console.error('Greška pri dobijanju podataka:', error);
    throw error; // Ponovo baciti
  }
}

// Pozivanje asinhrone funkcije i obrada rezultata
fetchData('https://api.example.com/data')
  .then(data => {
    console.log('Primljeni podaci:', data); // Ovaj callback će se izvršiti asinhrono
  })
  .catch(error => {
    console.error('Došlo je do greške:', error); // Ovaj callback će se izvršiti u slučaju greške
  });

console.log('Ovaj kod će se izvršiti PRE nego što asinhrone operacije završe.'); // Sinhroni kod

Razumevanje kako funkcioniše petlja događaja pomaže mi da pišem kod koji ne blokira, efikasno upravljam asinhronim operacijama i izbegavam "zamrzavanje" interfejsa. Uzimam u obzir da duge sinhrone operacije blokiraju glavni tok i petlju događaja, pa ih pokušavam izbegavati ili prebaciti u web radnike.