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
fonksiyonununms
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 kadarsleep
‘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çindesleep
‘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.