example ejemplo angular rxjs

ejemplo - Angular2 Observable: cómo llamar al siguiente desde fuera del constructor del Observable



rxjs/observable angular 6 (3)

Estoy construyendo un servicio que expone un observable. En este servicio, recibo llamadas de funciones externas que deberían activar una próxima llamada en el Observable para que varios consumidores obtengan el evento de suscripción. Durante el constructor Observer, puedo llamar a continuación y todo funciona bien, pero ¿cómo puedo acceder a este fuera del constructor para que los disparadores externos puedan disparar las próximas llamadas?

private myObservable$: Observable<any>;

Durante el servicio de inicio lo hago.

this.myObservable$ = new Observable(observer => { observer.next("initial message"); }

Luego, en otros métodos del mismo servicio, quiero poder ejecutar algo como

this.myObservable$.observer.next("next message");

Lo anterior obviamente no funciona, pero ¿cómo puedo lograr este objetivo?

Supongo que me estoy perdiendo algo básico ya que debe haber una manera de emitir más mensajes fuera del constructor inicial del Observable


Debes crear un Subject para eso

this.myObservable$ = new Subject();

Y luego puedes llamar en cualquier momento:

this.myObservable$.next(...);

O utilice suscribirse:

this.myObservable$.subscribe(...)


Dos caminos:

  1. Hacer myObservable $ public:

    public myObservable$: Observable;

  2. Encapsule lo observable en una secuencia de asunto y proporcione un ayudante para llamar a continuación:

    export class TestService { public myObservable$: Observable; private _myObservableSubject: Subject; constructor() { this._myObservableSubject = new Subject(); this.myObservable$ = this._myObservableSubject.asObservable(); } public NextMessage(message?: string): void { this._myObservableSubject.next(message); } }


En realidad, el Subject se usa tanto para el editor como para el suscriptor , y aquí creo que solo necesita publicar su valor, así que simplemente use Observable.

Mediante el uso de observable, asigne el suscriptor a la variable de nivel de clase y luego úselo, como el código a continuación

subscriber: Subscriber<boolean>; public observe(): Observable<boolean> { return new Observable<boolean>(subs => { this.subscriber = subs; }); } public callNext() { if (this.subscriber) { this.subscriber.next(); this.subscriber.complete(); } }