tutorial online learnrxjs learning for extensions dummies javascript rxjs rxjs5

javascript - online - ¿Cuáles son las semánticas de diferentes sujetos RxJS?



rxjs online (1)

La documentación para el tema es escasa y es difícil descubrir un "punto de entrada" allí.


La semántica difiere según el tipo de asignaturas. Los dividiré en dos tipos: vainilla ( Rx.Subject ) y temas especiales (los otros tres). Los sujetos de propósito especial comparten parte de la semántica del sujeto de vainilla con algunas advertencias debido a su especialización (por ejemplo, comportamiento de finalización / reconexión).

Vanilla Rx. Semántica del tema.

  1. Características clave

    • los sujetos implementan el observador, la interfaz observable (y la interfaz desechable ya que tienen un controlador de dispose en su prototipo). Eso significa, entre otras cosas, que tienen:
      • Interfaz de observador: onNext , onError , método onComplete
      • interfaz observable: método de subscribe
    • puede enviar un sujeto a un observador oa un observable, ocultando la implementación de las interfaces adicionales (ver .asObserver() y .asObservable() ) si es necesario
    • Como el sujeto es un observable, puede suscribir varios observadores. Ese observable luego transmitirá sus datos a todos sus observadores. Internamente el sujeto mantiene una serie de observadores.
    • Como el sujeto es un observador, puede suscribirse a cualquier observable.
    • El observador y el observable que componen el sujeto son dos entidades distintas, puede usarlas independientemente de la otra si ese es su caso de uso.
    • dispose un tema cancelará la suscripción de todos los observadores y liberará recursos.
    • Los sujetos no toman un programador, sino que asumen que toda la serialización y la corrección gramatical son manejadas por la persona que llama al sujeto.
    • El comportamiento predeterminado de los sujetos es emitir de forma sincrónica sus valores a los observadores, comenzando con el primer observador suscrito hasta el último . En la mayoría de los casos, el orden no importará, en otros lo hará.

Cito un aspecto clave del contrato y la gramática de Rxjs :

Esta gramática permite que las secuencias observables envíen cualquier cantidad (0 o más) de mensajes onNext a la instancia del observador suscrito, opcionalmente seguido de un solo mensaje de éxito (onCompleted) o failure (onError).

  • un sujeto de vainilla (creado con el new Rx.Subject() ) implementa esa gramática: cuando se llama una vez a onNext se ignoran todas las llamadas subsiguientes a onNext . La segunda llamada de onCompleted en el mismo observador también se ignora. Si un observador se suscribe a la parte observable del sujeto, se onComplete inmediatamente a su onComplete llamada onComplete ( http://jsfiddle.net/cLf6Lqsn/1/ ).

    1. Creación

      • new Rx.Subject()

    Devuelve un sujeto que conecta su observador con su observable ( jsfiddle ). Este ejemplo se ha tomado de la documentación oficial y describe cómo utilizar los sujetos como proxies. El sujeto está suscrito a una fuente (lado del observador), y también es escuchado por los observadores (lado observable). Cualquier llamada a onNext (lado del observador) da como resultado que el lado observable llame al onNext con el mismo valor para cada uno de sus observadores.

    • Rx.Subject.create(observer, observable)

    Crea un sujeto a partir del observador especificado y observable. Esos dos no están necesariamente conectados. Se puede ver un buen ejemplo en la implementación de Rx.Dom.fromWebSocket que devuelve un tema utilizado para enviar y recibir datos de un socket. El lado del observador del sujeto envía datos al zócalo. El lado observable se utiliza para escuchar los datos entrantes desde el zócalo. Además, un sujeto creado de esta manera NO tiene un método de dispose .

Semántica especializada en Rx.Subject

  • Esta documentación de reactivex.io cubre bastante bien la mayor parte de la semántica de los temas especializados.
  • Los otros puntos interesantes a mencionar tienen que ver con el comportamiento pasado la finalización.
  • El código de muestra que ilustra el comportamiento está aquí para async , behavior , replay

Ojalá no me haya equivocado demasiado. Estaré feliz de ser corregido. Última nota, esto debería ser válido para RxJS v4.

Para obtener una explicación detallada del comportamiento de los observables fríos / calientes, puede referirse a: Observables fríos y calientes: ¿hay operadores ''calientes'' y ''fríos''?