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.
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étodoonComplete
- interfaz observable: método de
subscribe
- Interfaz de observador:
- 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á.
- los sujetos implementan el observador, la interfaz observable (y la interfaz desechable ya que tienen un controlador de
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 aonNext
se ignoran todas las llamadas subsiguientes aonNext
. La segunda llamada deonCompleted
en el mismo observador también se ignora. Si un observador se suscribe a la parte observable del sujeto, seonComplete
inmediatamente a suonComplete
llamadaonComplete
( http://jsfiddle.net/cLf6Lqsn/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 alonNext
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 dedispose
.
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''?