önce
- Node.js kursu
- Orta seviye
- Ders 3/116
- 5 dk
.once ile tek seferlik dinleyici öğrenirsin.
önce metodu
once metodu tıpkı on gibi dinleyici kaydeder; farkı dinleyici yalnızca bir kez çağrılır, sonra otomatik kaldırılır. İmza: emitter.once(olayAdı, dinleyici).
Bu, başlangıç (setup) veya ilk kullanım senaryolarında yararlıdır. Örnek: emitter.once("hazir", () => console.log("İlk kurulum tamam"));. emit("hazir") üç kez çağrılsa bile mesaj yalnızca bir kez yazılır. once içtente on kullanıp dinleyiciyi kendiliğinden kaldırarak çalışır; bu yüzden tek seferlik dinleyici yazarken elle kaldırmaya gerek yoktur.
önce vs on
on ile eklenen dinleyici olay her fırlatıldığında çağrılır. once ile eklenen dinleyici ise yalnızca ilk fırlatışta çağrılır; sonraki fırlatışlarda yok sayılır.
İki metot da aynı dinleyici listesini paylaşır; once kaydı özel olarak işaretlenir. emitter.listenerCount(olayAdı) ile aktif dinleyici sayısını görebilirsin. İlk emit'ten sonra once dinleyicisi sayıdan düşer; on dinleyicisi kalır. Bu ayrım önbellek (cache) doldurma veya ilk bağlantı gibi tek seferlik işlerde pratiktir.
Uygulama Tek seferlik dinleyici ekle
emitter örneği oluştur. "ping" olayına once ile bir dinleyici ekle: console.log("Ping alındı") yazsın. emit("ping") çağrısını iki kez yap. Çıktıda mesaj yalnızca bir kez görünmeli.
Başlangıç kodu
// emitter örneğini oluştur
// buraya yaz
// "ping" olayına once ile dinleyici ekle
// buraya yaz
// "ping" olayını iki kez fırlat
// buraya yazÖrnek çözüm
const { EventEmitter } = require("events");
const emitter = new EventEmitter();
emitter.once("ping", () => console.log("Ping alındı"));
emitter.emit("ping");
emitter.emit("ping");Beklenen çıktı
Ping alındı
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Metodu davranışına eşle
| Kavram | Anlamı |
|---|---|
önce |
Tek seferlik dinleyici |
on |
Her seferinde çağrılır |
emit |
Olayı fırlatır |
removeListener |
Dinleyiciyi kaldırır |
2 önce çağrısını tamamla
emitter.____("once-event", handler);
emitter.önce("once-event", handler);
Açıklama: önce dinleyiciyi tek seferlik kaydeder.
3 önce ile on arasındaki temel fark nedir?
emitter.once("x", fn) vs emitter.on("x", fn)- önce daha hızlı çalışır
- önce yalnızca sayısal olayları dinler
- önce dinleyiciyi yalnızca bir kez çağırır sonra kaldırır Doğru cevap
- önce olayı hiç çağırmaz
Açıklama: önce dinleyiciyi bir kez çağırıp otomatik kaldırır.