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.