La documentation pour le sujet est clairsemée et il est difficile de découvrir un «point d'entrée».
La sémantique diffère selon le type de sujets. Je vais les diviser en deux sortes: vanilla ( Rx.Subject
) et sujets spéciaux (les trois autres). Les sujets spéciaux proposent une partie de la sémantique de la matière vanille avec quelques réserves en raison de leur spécialisation (par exemple, comportement d'achèvement / reconnexion).
Vanilla Rx.Subject sémantique
Principales caractéristiques
dispose
sur leur prototype). Cela signifie, entre autres, qu'ils ont:
onNext
, onError
, méthode onComplete
subscribe
.asObserver()
et .asObservable()
) si besoin est dispose
un sujet se désabonnera de tous les observateurs et libérer des ressources. Je cite un aspect clé du contrat et de la grammaire de Rxjs :
Cette grammaire permet aux séquences observables d'envoyer n'importe quel montant (0 ou plus) de messages onNext à l'instance d'observateur souscrit, éventuellement suivi d'un seul message de réussite (onCompleted) ou d'échec (onError).
Un sujet vanilla (créé avec le new Rx.Subject()
) implémente cette grammaire: lorsque onCompleted
a été appelée une fois, tous les appels suivants à onNext
sont ignorés. Le second appel de onCompleted
sur le même observateur est également ignoré. Si un observateur s'inscrit au côté observable de la matière, son onComplete
sera immédiatement appelé ( http://jsfiddle.net/cLf6Lqsn/1/ ).
Création
new Rx.Subject()
Renvoie un sujet qui relie son observateur à son observable ( jsfiddle ). Cet exemple est tiré de la documentation officielle et dépeint comment utiliser les sujets comme proxys. Le sujet est abonné à une source (côté observateur) et est également écouté par des observateurs (côté observable). Tout appel à la onNext
(côté observateur) entraîne la onNext
la ligne observable sur la onNext
avec la même valeur pour chacun de ses observateurs.
Rx.Subject.create(observer, observable)
Crée un sujet à partir de l'observateur spécifié et observable. Ces deux personnes ne sont pas nécessairement connectées. Un bon exemple peut être vu dans la mise en œuvre de Rx.Dom.fromWebSocket
qui renvoie un sujet utilisé pour envoyer et recevoir des données à partir d'un socket. Le côté observateur du sujet envoie des données à la socket. Le côté observable est utilisé pour écouter les données entrantes du socket. En outre, un sujet créé de cette façon n'a PAS une méthode dispose
.
Spécialisé Rx.Subjectif sémantique
reactivex.io
couvre très bien la plupart des sémantiques des sujets spécialisés. J'espère que je n'ai pas trop mal. Je serai ravi d'être corrigé. Dernière note, cela devrait être valable pour RxJS v4.
Pour une explication détaillée du comportement des observables froids / chauds, on peut se référer à: Observations chaudes et froides: existe-t-il des opérateurs «chauds» et «froids»?