Búsqueda de sitios web

typescript - Angular | Crear un Observable no funciona


En Angular6, estoy creando un servicio Injectable. Estoy tratando de inicializar un Observable en el constructor, vea el código simplificado a continuación.

Problema: La función de devolución de llamada de Observable.create nunca se ejecuta, y no hay errores. ¿Por qué console.log('authObserver creado!') nunca se llama?

import { Observable, Observer } from 'rxjs';

@Injectable()
export class UserLoginService implements OnInit{

  authObserver:Observer;
  authObservable:Observable;

  constructor() {
    this.authObservable = Observable.create((observer: Observer) => {
      this.authObserver = observer;
      console.log('authObserver created!')
    });  
  }    
}

randomCallbackFunction(){
  this.authObserver.next("Button has been clicked");
}

Respuesta #1

En tu código, no veo que ocurra ninguna suscripción. Los observables solo funcionan después de la suscripción. Intenta esto

this.authObservable = Observable.create((observer: Observer) => {
      this.authObserver = observer;
      console.log('authObserver created!')
    });
this.authObservable.subscribe()

Puedes verlo funcionando aquí

Respuesta #2

Necesitas suscribirte y vigilar correctamente para impulsar nuevos valores a través de lo siguiente:

/*
 Create an observable that emits 'Hello' and 'World' on  
 subscription.
*/
 const hello = Rx.Observable.create(function(observer) {
    observer.next('Hello');
    observer.next('World');
 });

 //output: 'Hello'...'World'
  const subscribe = hello.subscribe(val => console.log(val));

Echa un vistazo a este Fiddle.

Artículos relacionados