RxJS Subjects

28 Haz

RxJS’de Subjects gözlemlenebilir nesnenin (Observable) özel bir türüdür. Bunu, insanlarla dolu bir odadaki mikrofonla konuşan tek bir konuşmacı olarak düşünebilirsiniz. Burada:

  • Konuşmacının mesajları Subject,
  • Dinleyiciler Observer olarak düşünülebilir.

Konuşma esnasında mesajlar aynı anda birçok insana ulaşır. Bu olaya multicasting yani birden çok noktaya yayın yapmak denir. Dört farklı türde Subject vardır.

  1. Subject
  2. AsyncSubject
  3. BehaviorSubject
  4. ReplaySubject

Bu kavramları salondaki bir konuşmacının durumunu anlatan örnekler yaparak açıklayabiliriz.

Subject

Başlangıç değeri almaz ve tekrarlama davranışı göstermez.

Bu kod çalıştığında konsola iki defa, “merhaba sayın dinleyiciler.” mesajı yazılır.  Çünkü iki dinleyici bulunmaktadır. Salondaki bir konuşmacının her aklına geleni söylemesini buna örnek olarak verebiliriz.

AsyncSubject

İşlem tamamlandığında gözlemcilere en son mesaj değerini yayınlar.

Bu kod çalıştığında ekrana iki defa “merhaba arkadaşlar.” yazacaktır. Bunu salondaki bir konuşmacının aklında ilk cümlelerini düşünüp, ne söyleyeceğine karar verdiğinde konuşmasına benzetebiliriz. Yani konuşmacı, kullanıcılara en son aklında bulunan mesajı bildirmiş olur.

BehaviorSubject

Bir başlangıç değerine ihtiyaç duyar. Mevcuttaki en son değeri yeni abonelere yayınlar.

Burada salondaki konuşmacının sahneye çıkar çıkmaz selamlama yaptığı düşünülebilir. Konsola peş peşe iki defa “merhaba arkadaşlar.“, iki defa “nasılsınız“, iki defa da “konumuz küresel ısınma.” yazacaktır.

ReplaySubject

Belirtilen sayıda verilen son değeri, yeni abonelere tekrar yayınlar.

Burada salonda konuşmacı konuşurken bir dinleyici vardır. “selamlar” ve “nasılsınız” şeklinde iki mesaj yayınlanmıştır ve salondaki mevcut dinleyici tarafından bu mesajlar alınmıştır. Ancak ReplaySubject ile salona gelen sonraki dinleyicilere de önceki mesajlar tekrar gönderilir.

Sonuç

RxJS kütüphanesinde bulunan özel Observable türleri örnek uygulamalarla desteklenerek incelenmiştir.

Bir sonraki yazıda, RxJS kütüphanesindeki Operatörler incelenecektir.