JavaScript’te Asenkron İşlemler

JavaScript’te asenkron işlemler, tarayıcıdaki veya Node.js ortamındaki olay döngüsü (event loop) mekanizması tarafından yönetilir. Bu mekanizma, JavaScript’in tek iş parçacıklı (single-threaded) yapısı içinde asenkron işlemleri etkili bir şekilde gerçekleştirmesine olanak tanır.

Olay Döngüsü (Event Loop) Nedir?

Olay döngüsü, JavaScript çalışma zamanı ortamında, ana iş parçacığının bloklanmadan kodu çalıştırmasına izin veren bir mekanizmadır. Bu, kullanıcı arayüzünün sorunsuz çalışmasını ve asenkron işlemlerin (örneğin, ağ istekleri, zamanlayıcılar) gerçekleştirilmesini sağlar.

Temel Asenkron Kavramlar

  • Callback Fonksiyonları: Asenkron işlemler tamamlandığında çağrılmak üzere verilen fonksiyonlardır.
  • Promises: Asenkron işlemlerin sonucunu temsil eden nesnelerdir. resolve ve reject fonksiyonları aracılığıyla başarılı veya başarısız sonuçları işler.
  • Async/Await: Promises ile çalışmayı daha okunabilir hale getiren, ES2017 ile tanıtılan bir sözdizimi şeklidir.

Asenkron İşlemlerin Çalışma Prensibi

Asenkron işlemler, olay döngüsü, iş kuyruğu (task queue), ve mikro görev kuyruğu (microtask queue) aracılığıyla yönetilir. Bu sürecin nasıl işlediğini anlamak için aşağıdaki adımları inceleyebiliriz:

  1. Call Stack (Çağrı Yığını): JavaScript, kodu çağrı yığınında çalıştırır. Her işlev çağrıldığında yığına eklenir ve tamamlandığında yığından çıkarılır.
  2. Web API’ler: Tarayıcı, setTimeout, DOM olayları, AJAX istekleri gibi işlevleri içeren Web API’ler sağlar. Bu işlevler çağrıldığında çağrı yığından çıkarılır ve tarayıcı tarafından yönetilir.
  3. Task Queue (İş Kuyruğu): Web API’ler tarafından tamamlanan asenkron işlemler, callback fonksiyonlarını iş kuyruğuna ekler. Bu callback’ler, çağrı yığını boşaldığında olay döngüsü tarafından işlenir.
  4. Microtask Queue (Mikro Görev Kuyruğu): Promises ve process.nextTick (Node.js) gibi mikro görevler, iş kuyruğundan önce işlenir. Mikro görev kuyruğu, olay döngüsünde her iş tamamlandığında kontrol edilir.
  5. Event Loop (Olay Döngüsü): Olay döngüsü sürekli olarak çağrı yığını ve mikro görev kuyruğunu kontrol eder. Çağrı yığını boşaldığında, mikro görev kuyruğundaki görevler işlenir ve ardından iş kuyruğundaki görevler işlenir.

Örneklerle Açıklama

Callback Fonksiyonları ile Asenkron İşlem

console.log('Başlangıç');

setTimeout(function() {
    console.log('Asenkron işlem tamamlandı');
}, 2000);

console.log('Bitiş');

Çıktı:

Başlangıç
Bitiş
Asenkron işlem tamamlandı

Bu örnekte, setTimeout işlevi çağrıldığında tarayıcıya geçer ve 2 saniye sonra iş kuyruğuna callback fonksiyonunu ekler. Bu arada, “Bitiş” hemen yazdırılır ve ardından callback işlenir.

Promises ile Asenkron İşlem

console.log('Başlangıç');

let promise = new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve('Promise tamamlandı');
    }, 2000);
});

promise.then((message) => {
    console.log(message);
});

console.log('Bitiş');

Çıktı:

Başlangıç
Bitiş
Promise tamamlandı

Bu örnekte, Promise oluşturulduğunda asenkron işlem başlar ve 2 saniye sonra resolve fonksiyonu çağrılır. then metodu ile bu resolve çağrısını yakalarız ve mesajı yazdırırız.

Async/Await ile Asenkron İşlem

console.log('Başlangıç');

async function asyncFunction() {
    await new Promise((resolve) => {
        setTimeout(() => {
            resolve('Async/Await tamamlandı');
        }, 2000);
    });
}

asyncFunction().then((message) => {
    console.log(message);
});

console.log('Bitiş');

Çıktı:

Başlangıç
Bitiş
Async/Await tamamlandı

Bu örnekte, asyncFunction içinde await kullanarak Promise‘in tamamlanmasını bekleriz. Bu, daha okunabilir bir asenkron kod yazmamıza olanak tanır.

Sonuç

JavaScript’te asenkron işlemler olay döngüsü, iş kuyruğu, ve mikro görev kuyruğu aracılığıyla yönetilir. Callback fonksiyonları, Promises ve Async/Await gibi yapılar, bu işlemleri daha yönetilebilir hale getirir. Bu mekanizmalar, JavaScript’in tek iş parçacıklı yapısında yüksek performanslı asenkron işlemleri gerçekleştirmesini sağlar.

Ads Blocker Image Powered by Code Help Pro

Reklam Engelleyici Algılandı!

Reklamları engellemek için uzantı kullandığınızı tespit ettik.

Lütfen bu reklam engelleyiciyi devre dışı bırakarak ya da sitemize izin vererek bize destek olun.

Dikkat: VPN eklentiniz üzerinde de reklam engelleyici olabilir.