Sobes.tech
Middle

Olay döngüsü (event loop) ile nasıl etkileşime geçiyorsunuz?

sobes.tech yapay zeka

AI'dan gelen yanıt

Etkisayar döngüsüyle doğrudan etkileşime girmiyorum, çünkü bu JavaScript motorunun iç mekanizmasıdır (örneğin, Node.js ve tarayıcılardaki V8). Etkileşimim dolaylıdır, asenkron işlemler aracılığıyla gerçekleşir.

Ana temas noktaları:

  • Zamanlayıcılar: setTimeout, setInterval. Bunlar görevleri callback kuyruğuna koyar, bu da olay döngüsü tarafından zaman aşımından sonra çalıştırılır.
  • Promisler: Promise. Yöntemleri (then, catch, finally) callbackleri kaydeder, bunlar olay döngüsünün mikro görevlerinde asenkron olarak çalıştırılır.
  • Asenkron giriş/çıkış işlemleri: Sunucuya istekler (fetch, XMLHttpRequest), Node.js'de dosya sistemiyle çalışma. Tamamlandıklarında, ilgili callbackleri makro veya mikro görev kuyruğuna koyar.
  • DOM olay işleyicileri: addEventListener. Olay döngüsü DOM'da gerçekleşen olayları işlerken, olay işleyici callbackleri çalıştırılır.

Asenkron bir işlem için promise kullanımı örneği:

// Asenkron fonksiyon
async function fetchData(url) {
  try {
    const response = await fetch(url); // Asenkron işlem
    if (!response.ok) {
      throw new Error(`HTTP Hatası: ${response.status}`);
    }
    const data = await response.json(); // Asenkron işlem
    return data;
  } catch (error) {
    console.error('Veri alınırken hata:', error);
    throw error; // Hata fırlat
  }
}

// Asenkron fonksiyon çağrısı ve sonucu işleme
fetchData('https://api.example.com/data')
  .then(data => {
    console.log('Alınan veriler:', data); // Bu callback asenkron çalışacaktır
  })
  .catch(error => {
    console.error('Hata oluştu:', error); // Hata durumunda çalışır
  });

console.log('Bu kod, asenkron işlemler tamamlanmadan önce çalışacaktır.'); // Senkron kod

Event loop'un nasıl çalıştığını anlamak, bloklamayan kod yazmama, asenkron işlemleri etkin yönetmeme ve kullanıcı arayüzünün donmasını önlememe yardımcı olur. Uzun süren senkron işlemlerin ana akış ve olay döngüsünü engellediğini bilerek, bunları önlemeye veya web işçilerine taşımaya çalışıyorum.