CodeBlanks Logo Icon CodeBlanks

removeListener

.removeListener ile dinleyici kaldırmayı öğrenirsin.

removeListener

removeListener metodu daha önce eklenmiş bir dinleyiciyi kaldırır. İmza: emitter.removeListener(olayAdı, dinleyici). Kısaltması off ile aynı işi yapar.

Önemli nokta: dinleyici olarak aynı fonksiyon referansını vermelisin. Anonim fonksiyonlar her seferinde yeni referans ürettiği için kaldırılamaz. Bu yüzden kaldırılacak dinleyiciyi önce bir değişkene atarsın: const handler = () => console.log("bip");. Sonra emitter.removeListener("ses", handler) ile kaldırırsın. Bellek sızıntısını önlemek için gereksiz dinleyicileri temizlemek iyi bir alışkanlıktır.

Dinleyici referansı

Anonim bir dinleyici doğrudan on içine yazılırsa referansı kaybolur: emitter.on("ses", () => {}). Bu dinleyiciyi sonra kaldıramazsın. Çözüm: fonksiyonu önce tanımla, sonra hem on'a hem removeListener'a aynı değişkeni ver.

Örnek: const handler = () => console.log("bip"); emitter.on("ses", handler); emitter.emit("ses"); emitter.removeListener("ses", handler); emitter.emit("ses");. İlk emit bip yazdırır; ikinci emit hiçbir şey yazdırmaz çünkü dinleyici kaldırıldı. Bu denetim olay akışını yönetmenin temel yoludur.

Uygulama Dinleyici ekle, çağır, kaldır

handler adında bir fonksiyon tanımla: console.log("Bip!") yazsın. emitter.on("beep", handler) ile ekle. emit("beep") çağır. Sonra removeListener("beep", handler) ile kaldır ve tekrar emit("beep") çağır. Çıktı yalnızca bir Bip! olmalı.

Başlangıç kodu

index.js
// emitter örneğini oluştur
// buraya yaz

// handler fonksiyonunu tanımla
// buraya yaz

// "beep" olayına dinleyici ekle, bir kez fırlat, kaldır, tekrar fırlat
// buraya yaz

Örnek çözüm

index.js
const { EventEmitter } = require("events");
const emitter = new EventEmitter();
const handler = () => console.log("Bip!");
emitter.on("beep", handler);
emitter.emit("beep");
emitter.removeListener("beep", handler);
emitter.emit("beep");

Beklenen çıktı

Bip!

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Metodu rolüne eşle

Kavram Anlamı
removeListener Dinleyiciyi kaldırır
off removeListener'ın kısaltması
on Dinleyici ekler
emit Olayı fırlatır

2 removeListener için ne gerekir?

index.js
emitter.removeListener(name, fn)
  • Yalnızca olay adı
  • Olayın yayınlanma sayısı
  • Olay adı ve dinleyici sayısı
  • Aynı fonksiyon referansı Doğru cevap

Açıklama: Aynı fonksiyon referansı verilmelidir.

3 Kaldırma satırını tamamla

Soru
emitter.removeListener("ses", ____);
Cevap
emitter.removeListener("ses", handler);

Açıklama: Aynı handler referansı verilir.

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