Quelles sont les sémantiques de différents sujets RxJS?

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

  1. Principales caractéristiques

    • Les sujets implémentent l'observateur, l'interface observable (et l'interface jetable car ils disposent d'un dispositif d' dispose sur leur prototype). Cela signifie, entre autres, qu'ils ont:
      • Interface d'observateur: onNext , onError , méthode onComplete
      • Interface observable: méthode de subscribe
    • Vous pouvez émettre un sujet à un observateur ou à un observable, en cachant la mise en œuvre des interfaces supplémentaires (voir .asObserver() et .asObservable() ) si besoin est
    • Le sujet étant observable, vous pouvez vous inscrire à plusieurs observateurs. Ce constat sera ensuite diffusé ses données à tous ses observateurs. En interne, le sujet maintient une série d'observateurs.
    • Le sujet étant un observateur, vous pouvez l'abonner à tout observable
    • L'observateur et l'observable qui composent le sujet étant deux entités distinctes, vous pouvez les utiliser indépendamment de l'autre si c'est votre cas d'utilisation.
    • dispose un sujet se désabonnera de tous les observateurs et libérer des ressources.
    • Les sujets ne prennent pas de planificateur, mais supposent plutôt que la sérialisation et l'exactitude grammaticale sont traités par l'appelant du sujet.
    • Le comportement par défaut des sujets consiste à émettre de manière synchrone leurs valeurs aux observateurs, en commençant par le premier observateur souscrit au dernier . Dans la plupart des cas, l'ordre ne sera pas important, dans d'autres, il le fera.

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/ ).

    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

  • Cette documentation reactivex.io couvre très bien la plupart des sémantiques des sujets spécialisés.
  • Les autres points intéressants à mentionner concernent le comportement après l'achèvement.
  • Un exemple de code illustrant le comportement est ici pour l' async , le comportement , la relecture

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»?