Diğer programlama dillerinden farklı olarak JavaScript'te yerleşik bir uyku yöntemi yoktur. Bu nedenle, bir Node.js programını duraklatmak için basitçe bir uyku() işlevini çağıramazsınız. Ancak, bir programı belirli bir süre bekletmenin başka yolları da vardır.

Bu öğreticide üç yaklaşım ele alınmaktadır: setTimeout, async/await ve uyku sözü paketi.

Belirli Bir Zamanı Beklemek için setTimeout() Kullanımı

bu setZaman aşımı() işlevi, belirli bir süre geçtikten sonra yürütülecek çalışma zamanı kodunu programlar. Milisaniye cinsinden bir işlevi ve gecikme süresini kabul eder. İşte sözdizimi:

setZaman aşımı(işlev(), timeInM'ler)

Örneğin, konsolda yazdıran bir işleviniz olduğunu varsayalım:

işlevbaskıCümle() {
konsol.log("setTimeout()'u kullanma")
}

Yukarıdaki işlevi iki saniye geçtikten sonra çalıştırmak için işlevi ve 2000ms gecikme süresini setZaman aşımı() işlev:

setTimeout (printSentence, 2000)

Bu çalışırken, işlevinizin tam olarak iki saniye sonra çalışacağı garanti edilmez. Kesinlikle en azından bu kadar zaman alacaktır, ancak daha fazlasını da alabilir.

instagram viewer

setTimeout() Doğru mu?

Evet, ancak bazı uyarılarla. setZaman aşımı() bir eşzamansız JavaScript işlevi bu da engelleyici olmadığı anlamına gelir. Programladığınız kod, programınızın geri kalanı devam ederken olay döngüsüne eklenir.

Gecikme süresi geçtikten sonra, programınız planlanan kodu yürütecektir, ancak bunu yapmakta serbest olduğu zaman. Çağrı yığınında başka bir kod varsa, programlanan kodun çalışması nedeniyle olsa bile önce yürütülür. Bu, ekstra gecikme süresinin meydana gelebileceği yerdir, dolayısıyla yanlışlık.

Aşağıdaki programı düşünün.

konsol.log("Selam Dünya!")

işlevbaskıCümle() {
konsol.log("setTimeout()'u kullanma")
}

setTimeout (printSentence, 2000)
konsol.log("Tamamlandı")

Çalıştırdığınızda konsolun göstereceği şey:

Selam Dünya!
Tamamlandı
setTimeout()'u kullanma

Bu program bir gecikme sağlar, ancak yalnızca geçtiği kodu geciktirir. setZaman aşımı(). Programın geri kalanı, programlanan kod yalnızca süre geçtikten sonra kesintiye uğratılarak devam eder. Tüm bu kodu sırayla, ortada bir duraklama ile çalıştırmak istiyorsanız, setZaman aşımı() çalışmayacak.

Bir alternatif, ihtiyacınız olduğu sürece yürütmeyi engelleyecek eşzamanlı kod yazmaktır. Örneğin, bir yaparken gecikme süresi dolana kadar yürütme iş parçacığını engellemek için döngü:

işlevgecikme(Hanım) {
const tarih = Tarih.şimdi();
İzin Vermek geçerliTarih = boş;

yapmak {
geçerliTarih = Tarih.şimdi();
} süre (currentDate - tarih < ms);
}

konsol.log("Selam Dünya");
gecikme (2000);
konsol.log("2 saniye sonra basılacaktır!");

bu gecikme() fonksiyon, geçerli zaman, başlangıç ​​zamanı artı gecikmeye eşit veya bundan büyük olana kadar döngü yapar. Bu yaklaşımın dezavantajı, özellikle büyük gecikmelerde CPU yoğun olmasıdır. bu do... while döngüsü her milisaniyeden sonra kalan süreyi hesaplamak zorundadır.

Bir Node.js Programını Geciktirmek için Async/Await Kullanma

Bir beklemek ifadesi, bir Söz çözülene kadar yürütmenin duraklatılmasına neden olur. Eşzamansız kodu eşzamanlıymış gibi çalıştırmanıza olanak tanır, ancak yürütmeyi manuel olarak engellemekten daha verimlidir. Beklemeyi yalnızca işaretli bir işlevin içinde kullanabilirsiniz. zaman uyumsuz.

işlevgecikme(zaman) {
dönüşyeniSöz vermek(çözme => setTimeout (çözme, zaman));
}

zaman uyumsuzişlevbaskıCümle() {
konsol.log("Selam Dünya")
beklemek gecikme(2000);
konsol.log("2 saniye sonra yazdırılacak");
}

printSentence();

Bu yukarıdaki programın çıktısı:

Selam Dünya
2 saniye sonra yazdırılacak

Uyku vaadi Paketini kullanma

bu uyku vaadi paketi, Node.js programlarını duraklatma işlemini basitleştirir. Sadece aramanız ve gecikme süresini milisaniye cinsinden belirtmeniz yeterlidir.

Npm ile kurarak başlayın:

npm Yüklemekuyku-söz vermek

Programınızda nasıl kullanabileceğinize dair bir örnek:

const uyku = gerekmek('uyku vaadi');

(zaman uyumsuz () => {
konsol.log("Selam Dünya.");
beklemek uyku(2000);
konsol.log("İki saniye sonra yazdırılacaktır.");
})();

Programı çalıştırdığınızda çıktısı aşağıdaki gibi olacaktır.

Selam Dünya.
İki saniye sonra yazdırılacaktır.

Uygun Bir Yaklaşım Seçme

Node.js'de uyku işlevi uygulamak zor olabilir. Bunu nasıl yapacağınıza karar verirken, neyi başarmak istediğinizi düşünün. Sadece bazı kodları minimum bir süre için geciktirmek istiyorsanız, setZaman aşımı() iyi bir seçenektir. Ancak tüm programınızın yürütülmesini duraklatmak istiyorsanız, kullanmalısınız. zaman uyumsuz/bekleme.

Senkron vs. Asenkron Programlama: Nasıl Farklılar?

Sonrakini Oku

PaylaşmakCıvıldamakPaylaşmakE-posta

İlgili konular

  • Programlama
  • Web Geliştirme
  • Programlama
  • JavaScript

Yazar hakkında

Mary Gathoni (19 Makale Yayınlandı)

Mary Gathoni, yalnızca bilgilendirici değil aynı zamanda ilgi çekici teknik içerik yaratma tutkusuna sahip bir yazılım geliştiricisidir. Kod yazmadığı veya yazmadığı zamanlarda arkadaşlarıyla takılmaktan ve dışarıda olmaktan hoşlanıyor.

Mary Gathoni'dan Daha Fazla

Haber bültenimize abone ol

Teknik ipuçları, incelemeler, ücretsiz e-kitaplar ve özel fırsatlar için bültenimize katılın!

Abone olmak için buraya tıklayın