Subject

Sebuah Subject adalah semacam jembatan atau proksi yang bisa digunakan di beberapa implementasi ReactiveX yang berperan sebagai sebuah observer sekaligus sebagai sebuah Observable. Dikarenakan Subject merupakan sebuah observer, Subject mampu melakukan subscribe kepada satu atau lebih Observable. Dan karena Subject juga merupakan sebuah observer, Subject juga mampu melewatkan item-item yang di-observe olehnya dengan cara memancarkan mereka kembali, dan Subject juga bisa memancarkan item-item baru.

Dikarenakan sebuah Subject melakukan subscribe kepada sebuah Obervable, dia akan memicu Observable tersebut untuk memulai memancarkan item-item (Jika observable tersebut merupakan Observable yang "dingin", yang dimana artinya jika Observable tersebut menunggu sebuah subscription sebelum memancarkan item-item). Ini bisa mengakibatkan Subject tersebut menjadi sebuah Observable yang "panas", varian yang lain dari Observable yang "dingin".

Lihat Juga

Jenis-jenis Subject

Ada 4 jenis dari Subject yang didesain untuk penggunaan tertentu. Tidak semua dari 4 jenis tersebut tersedia di seluruh implementasi, dan beberapa implementasi juga mempunyai nama yang lain untuk Subject (contohnya, di RxScala, apa yang dikenal sebagai "PublishSubject" dikenal sebagai "Subject" disini):

AsyncSubject

Sebuah AsyncSubject memancarkan nilai terakhir (dan hanya nilai terakhir) yang dipancarkan dari Observable sumber, dan hanya ketika Observable sumber tersebut sudah selesai. (Jika Observable sumber tidak memancarkan nilai apapun, AsyncSubject juga langsung selesai tanpa memancarkan nilai apapun.)

AsyncSubject juga akan memancarkan nilai terakhir ini kepada semua observer yang baru melakukan subscription. Bagaimanapun, jika Observable sumber terhenti dengan sebuah error, AsyncSubject tidak akan memancarkan item apapun, tapi hanya akan meneruskan notifikasi error tersebut dari Observable sumber.

Lihat Juga

BehaviorSubject

Ketika sebuah observer melakukan subscribe kepada sebuah BehaviorSubject, dia akan memulai memancarkan item yang paling baru dipancarkan Observable sumber tersebut (atau sebuah default value jika belum memancarkan item apapun) dan kemudian akan memancarkan item-item yang dipancarkan oleh Observable sumber tersebut.

Bagaimanapun, jika Observable sumber terhenti dengan sebuah error BehaviorSubject tidak akan memancarkan items apapun ke observer-observer yang akan melakukan subscribe, tetapi hanya akan meneruskan notifikasn error dari Observable sumber tersebut.

Lihat Juga

PublishSubject

PublishSubject memancarkan item kepada sebuah observer hanya jika item tersebut dipancarkan dari Observable sumber dan setelah observer tersebut sudah melakukan subscription.

Perhatikan bahwa sebuah PublishSubject bisa langsung memulai memancarkan item segera setelah dibuat (kecuali jika anda telah mempunyai beberapa cara tertentu untuk mencegah ini), jadi ada resiko satu atau lebih item bisa hilang diantara waktu Subject terbuat dan ketika observer melakukan subscribe kepadanya. Jika anda perlu untuk menjamin penerimaan dari semua items dari Observable sumbernya, anda harus membuat Observable tersebut dengan Create sehingga Observable yang dibuat dapat memiliki ciri khas Observable "dingin" (yaitu harus melakukan pengecekan untuk mengetahui apakah semua observer sudah melakukan subscribe kepadanya sebelum memulai memancarkan item), atau bisa juga menggantinya dengan sebuah ReplaySubject.

Jika Observable sumber terhenti dikarenakan sebuah error, PublishSubject tidak akan memancarkan item apappun ke observer yang akan melakukan subscribe, tetapi hanya akan meneruskan notifikasi error dari Observable sumber tersebut.

ReplaySubject

ReplaySubject memancarkan kepada observer semua item yang sudah dipancarkan oleh Observable sumber sebelumnya, tidak peduli kapan observer tersebut melakukan subscribe.

Ada juga beberapa versi dari ReplaySubject yang akan membuang item dari yang paling lama ketika kapasitas pengulangan item tersebut sudah melewati batas tertentu, atau ketika sebuah jeda waktu tertentu sudah lewat sejak item-item tersebut dipancarkan.

jika anda menggunakan sebuah ReplaySubject sebagai sebuah observer, anda harus memperhatikan bahwa anda tidak boleh memanggil method onNext nya (atau method on lainnya) dari thread yang berbeda-beda, dimana ini bisa menimbulkan pemanggilan di saat yang sama (tidak berurutan) yang melanggar Kontrak Observable dan menghasilkan ambiguitas di Subject yang dihasilkan untuk menentukan item atau notifikasi yang mana yang harus di-replay terlebih dahulu

Lihat Juga

Informasi Terkait masing-masing bahasa:

Jika anda mempunyai sebuah Subject dan ingin meneruskannya ke agen-agen lainnya tanpa mengekspos interface Subscriber-nya, anda bisa menutupinya dengan memanggil method asObservable-nya, yang akan mengembalikan Subject tersebut sebagai sebuah Observable yang murni.

Lihat Juga

Jika anda mempunyai sebuah Subject dan ingin meneruskannya ke agen-agen lainnya tanpa mengekspos interface Subscriber-nya, anda bisa menutupinya dengan memanggil method asObservable-nya, yang akan mengembalikan Subject tersebut sebagai sebuah Observable yang murni.

Lihat Juga

TBD

Lihat Juga

TBD

Lihat Juga

TBD

TBD