CodeBlanks Logo Icon CodeBlanks

önce

.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

index.js
// 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

index.js
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

Soru
emitter.____("once-event", handler);
Cevap
emitter.önce("once-event", handler);

Açıklama: önce dinleyiciyi tek seferlik kaydeder.

3 önce ile on arasındaki temel fark nedir?

index.js
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.

Orta seviye bölümündeki tüm dersler