Sobes.tech
Middle

Оқига цикли (event loop) менен кантип иштешесиз?

sobes.tech AI

AIден жооп

Мен түздөн-түз иш-чаралар цикли менен иштебейм, бул JavaScript кыймылдаткычынын ички механизми (мисалы, V8 Node.js жана браузерлерде). Менин өз ара аракеттенүүм косвенно, асинхрондук операциялар аркылуу өтөт:

Негизги байланыш пункттары:

  • Таймерлер: setTimeout, setInterval. Алар колбектердин кезегине тапшырмаларды коюп, убакыт бүтүп калгандан кийин иштетилет.
  • Промисстер: Promise. Алардын методдору (then, catch, finally) асинхрондук түрдө ишке ашырылуучу колбектерди каттайт.
  • Асинхрондук киргизүү-чыгуу операциялары: Серверге суроолор (fetch, XMLHttpRequest), Node.jsдеги файл тутуму менен иштөө. Аларды аяктоо тиешелүү колбектерди макротаск же микротаск кезегине коюуга алып келет.
  • DOM окуяларынын иштеткичтери: addEventListener. Колбектер иштеткичтер DOMдо болгон окуяны иштеткенде ишке ашырылат.

Мисал катары промисстерди колдонуу:

// Асинхрондук функция
async function fetchData(url) {
  try {
    const response = await fetch(url); // Асинхрондук операция
    if (!response.ok) {
      throw new Error(`HTTP ката: ${response.status}`);
    }
    const data = await response.json(); // Асинхрондук операция
    return data;
  } catch (error) {
    console.error('Маалыматтарды алуудө ката:', error);
    throw error; // Катады өткөрүп берүү
  }
}

// Асинхрондук функцияны чакыруу жана натыйжаны иштетүү
fetchData('https://api.example.com/data')
  .then(data => {
    console.log('Алынып келген маалымат:', data); // Бул колбэк асинхрондуу ишке ашырылат
  })
  .catch(error => {
    console.error('Ката пайда болду:', error); // Бул колбэк ката болгондо ишке ашырылат
  });

console.log('Бул код асинхрондук операциялар аяктагандан кийин ИШКЕ ашырылат.'); // Бул синхрондук код

Event loop принциптерин түшүнүү менин блоктогон эмес, эффективдүү асинхрондук код жазуумду жана интерфейсдин "талаа" болуусун алдын алууга жардам берет. Мен түшүнөм, узак мөөнөттүү синхрондук операциялар негизги агымды жана иш-чаралар циклін блоктоп турат, ошондуктан алардан алыс болууга аракет кылам же веб-воркерлерге өткөрүп берем.