Middle
Hadisə döngüsü (event loop) ilə necə qarşılıqlı əlaqə qurursunuz?
sobes.tech Süni İntellekt
AI-dan cavab
Mən birbaşa hadisələr döngüsü ilə əlaqə qurmuram, çünki bu, JavaScript mühərrikinin daxili mexanizmasıdır (məsələn, Node.js-də V8 və brauzerlərdə). Mənim əlaqəm dolayıdır, asinxron əməliyyatlar vasitəsilə həyata keçirilir.
Əsas əlaqə nöqtələri:
- Zamanlayıcılar:
setTimeout,setInterval. Onlar tapşırıqları callbacklar növbəsinə qoyur, hansı ki, hadisələr döngüsü tərəfindən vaxt keçdikdən sonra icra olunur. - Vədələr:
Promise. Onların metodları (then,catch,finally) callbackları qeyd edir, hansı ki, hadisələr döngüsünün mikro tapşırıqlarında asinxron şəkildə icra olunur. - Asinxron giriş/çıxış əməliyyatları: Serverə sorğular (
fetch,XMLHttpRequest), Node.js-də fayl sistemi ilə işləmə. Onların tamamlanması müvafiq callbackların makro və ya mikro tapşırıqlar növbəsinə yerləşdirilməsinə səbəb olur. - DOM hadisə idarəediciləri:
addEventListener. İdarəedicilərin callbackləri hadisələr DOM-da baş verdikdə icra olunur.
Asinxron əməliyyat üçün vədələrin istifadəsi nümunəsi:
// Asinxron funksiya
async function fetchData(url) {
try {
const response = await fetch(url); // Asinxron əməliyyat
if (!response.ok) {
throw new Error(`HTTP xətası: ${response.status}`);
}
const data = await response.json(); // Asinxron əməliyyat
return data;
} catch (error) {
console.error('Məlumatların alınmasında xəta:', error);
throw error; // Yenidən at
}
}
// Asinxron funksiyanı çağırmaq və nəticəni işləmək
fetchData('https://api.example.com/data')
.then(data => {
console.log('Alınan məlumatlar:', data); // Bu callback asinxron icra olunacaq
})
.catch(error => {
console.error('Xəta baş verdi:', error); // Bu callback xəta baş verdikdə icra olunacaq
});
console.log('Bu kod asinxron əməliyyatlar tamamlanmadan ƏVVƏLICƏ icra olunacaq.'); // Sinxron kod
Hadisələr döngüsünün necə işlədiyini anlamaq, bloklamayan kod yazmağa kömək edir, asinxron əməliyyatları səmərəli idarə etməyə və istifadəçi interfeysinin donmamasını təmin etməyə kömək edir. Mən nəzərə alıram ki, uzunmüddətli sinxron əməliyyatlar əsas axını və hadisələr döngüsünü bloklayır, ona görə də onları qaçınmağa və ya veb işçilərinə köçürməyə çalışıram.