Saltar al contenido

Cómo detener observable.timer en Angular2

Después de tanto batallar pudimos hallar el resultado de esta obstáculo que muchos lectores de nuestro sitio han tenido. Si quieres aportar algún detalle no dejes de compartir tu comentario.

Solución:

Hay básicamente dos formas:

  • llamar unsubscribe() en el objeto Suscripción devuelto por el subscribe() llamar .
  • usar un operador

Para sólo unsubscribe podrías hacerlo así.

ngOnInit() 
  this.subscription = timer(100, 100).subscribe(t => 
    this.setFormData();
  );


private setFormData() 
  ...
  this.subscription.unsubscribe();

O puede usar Asunto para completar el Observable a través de takeUntil() operador:

this.subject = new Subject();

ngOnInit() 
  timer(100, 100).pipe(
    takeUntil(this.subject),
  ).subscribe(t => this.setFormData());


private setFormData() 
  ...
  this.subject.next();

Echa un vistazo a estos también:

  • Diferencia entre .unsubscribe a .take(1)
  • RxJS: takeUntil() ngOnDestroy() del componente angular

Enero de 2019: actualizado para RxJS 6

puedes usar unsubscribe método cuando desea detener el temporizador observable como este

this.timer = Observable.timer(100, 100);
this.subscription = this.timer.subscribe(t => 
    this.setFormData();
);

.............
this.subscription.unsubscribe();

Un matiz que las respuestas anteriores realmente no han cubierto es que no hay necesidad de deténgase un temporizador/intervalo observable, al menos no al interactuar con el observable o el temporizador en sí.

Me encontré aquí porque estaba configurando un observable usando un temporizador en el método de inicio de HostedService, y en el método de parada pareció como si debería detenerlo, o desechar algo seguramente? – bueno no. El temporizador observable no necesita ser detenido o desechado de esta manera, solo las suscripciones, y es por eso que…

Los temporizadores e intervalos observables son ejemplos de corrientes frías (aunque parecen comportarse como calientes). Son pasivos, no activos, no producen datos hasta que están suscritos y dejan de producir datos cuando no hay suscriptores. Por lo tanto, la eliminación de todas las suscripciones debería ser todo lo que se requiere para detener la producción de datos del temporizador.

Más información aquí… [http://introtorx.com/Content/v1.0.10621.0/14_HotAndColdObservables.html]

Puntuaciones y comentarios

Recuerda que te brindamos la opción de explicar si diste con el arreglo.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *