La documentation sur le sujet est rare et il est difficile d'y découvrir un "point d'entrée".
La sémantique diffère selon le type de sujets. Je vais les diviser en deux types: la vanille (Rx.Subject
) Et les sujets à usage spécial (les trois autres). Les sujets spécialisés partagent une partie de la sémantique du sujet Vanille avec quelques mises en garde en raison de leur spécialisation (par exemple, le comportement de complétion/reconnexion).
Sémantique Vanilla Rx.Subject
Principales caractéristiques
dispose
sur leur prototype). Cela signifie, entre autres, qu'ils ont: onNext
, onError
, onComplete
subscribe
.asObserver()
, et .asObservable()
) si besoin estdispose
si un sujet sera désinscrire tous les observateurs et libérer les ressources.Je cite un aspect clé de contrat et grammaire Rxjs :
Cette grammaire permet aux séquences observables d'envoyer n'importe quelle quantité (0 ou plus) de messages onNext à l'instance d'observateur abonnée, éventuellement suivie d'un seul message de réussite (onCompleted) ou d'échec (onError).
un sujet Vanilla (créé avec new Rx.Subject()
) implémente cette grammaire: lorsque onCompleted
a été appelé une fois, tous les appels suivants à onNext
sont ignorés. Le deuxième appel de onCompleted
sur le même observateur est également ignoré. Si un observateur s'abonne au côté observable du sujet, son rappel 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 l'officiel documentation et décrit 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 à onNext
(côté observateur) entraîne le côté observable à appeler 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-là ne sont pas nécessairement liés. Un bon exemple peut être vu dans l'implémentation de Rx.Dom.fromWebSocket
qui retourne 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 prise. Le côté observable est utilisé pour écouter les données entrantes du socket. De plus, un sujet créé de cette façon n'a PAS de méthode dispose
.
Sémantique spécialisée Rx.Subject
reactivex.io
couvre assez bien la plupart de la sémantique des sujets spécialisés.J'espère que je ne me suis pas trop trompé. Je serai heureux d'être corrigé. Dernière remarque, 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 à: Observables chauds et froids: existe-t-il des opérateurs "chauds" et "froids"?