JavaScript Fundamentals

JavaScript’te Senkron Olmayan duraklamalar: Promise’lar vs. Async/Await

Spread the love

Tek iş parçacıklı olan JavaScript, diğer dillerde bulunan sleep() fonksiyonunun doğrudan bir eşdeğerinden yoksundur. Bir duraklamayı simüle etmek, eşzamansız teknikler kullanmayı gerektirir. Bu makale iki yaklaşımı ele almaktadır: biri setTimeout ve Promise’ler kullanarak, diğeri ise daha temiz async/await sözdizimini kullanarak.

İçindekiler

Promise’ler ile Sleep Fonksiyonu Uygulama

En basit yöntem, bir Promise içinde setTimeout kullanmayı içerir. Bu, ana iş parçacığını bloke etmeyi önleyerek uygulamanızın yanıt vermeye devam etmesini sağlar.


function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

sleep(2000)
  .then(() => console.log("2 saniye uyudu!"))
  .catch(error => console.error("Bir hata oluştu:", error));

console.log("Bu, sleep fonksiyonu tamamlanmadan önce çalıştırılacaktır.");

Açıklama:

  • sleep(ms): Bu fonksiyon, uyku süresini milisaniye cinsinden (ms) bir bağımsız değişken olarak alır.
  • new Promise(resolve => setTimeout(resolve, ms)): Bir Promise oluşturulur. setTimeout, resolve fonksiyonunun ms milisaniye sonra çağrılmasını planlar. Bu, Promise’i çözer ve uykunun sonunu işaretler.
  • .then(): Bu, çözülen Promise’i işler ve uyku tamamlandıktan sonra içindeki kodu çalıştırır.
  • .catch(): Bu isteğe bağlı bölüm, zaman aşımı sırasında oluşabilecek hataları ele alır.

Bu yöntem verimlidir ve ana iş parçacığını bloke etmenin sakıncalarından kaçınır. Bununla birlikte, .then() kullanımı bazı programcılar için daha az sezgisel görünebilir.

Async/Await ile Sleep Fonksiyonu Uygulama

Async/await, daha okunabilir ve tartışmasız daha zarif bir çözüm sunar. Promise tabanlı yaklaşıma dayanır ancak eşzamansız akışı basitleştirir.


async function sleep(ms) {
  await new Promise(resolve => setTimeout(resolve, ms));
}

async function myFunction() {
  console.log("Başlıyor...");
  await sleep(2000);
  console.log("2 saniye uyudu!");
}

myFunction();
console.log("Bu, sleep fonksiyonu tamamlanmadan önce çalıştırılacaktır.");

Açıklama:

  • async function sleep(ms): async anahtar sözcüğü, eşzamansız bir fonksiyonu belirtir.
  • await new Promise(...): await anahtar sözcüğü, Promise çözülene kadar sleep‘in yürütülmesini duraklatır. Bu duraklama, ana iş parçacığını bloke etmez.
  • async function myFunction(): Bu fonksiyon, daha büyük bir eşzamansız işlem içinde sleep‘in nasıl kullanılacağını gösterir.

async/await sözdizimi, eşzamansız kodun eşzamansız görünmesini sağlayarak okunabilirliği ve sürdürülebilirliği artırır. Bu, netliği ve kullanım kolaylığı nedeniyle genellikle tercih edilen yaklaşımdır.

Her iki yöntem de aynı sonucu elde eder, ancak async/await, JavaScript’te eşzamansız işlemleri işlemek için daha modern ve okunabilir bir sözdizimi sunar. Üretim kodunda meşgul bekleme döngülerinden kaçının; uygulamanızı dondururlar.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir