Tengo una suscripción en la que recibo algunos mensajes de la tienda para generar tostadoras.
Cancelé la suscripción mediante subscribe .unsubscribe() .
¿Cómo puedo comprobar que realmente me he dado de baja?
subscription!: Subscription; ngOnInit(): void { } toastrError(): void { this.subscription = this.store.select(getMessage).subscribe(m => { (m.message && m.title) ? this.toastr.error(m.message, m.title) : null; }); } singIn(): void { this.toastrError(); } ngOnDestroy(): void { this.subscription.unsubscribe(); }Una instancia de componente tiene un ciclo de vida que comienza cuando Angular crea una instancia de la clase de componente y representa la vista del componente (junto con sus vistas secundarias). El ciclo de vida continúa con alguna detección de cambios, ya que Angular verifica cuándo cambian las propiedades vinculadas a los datos y, en respuesta, actualiza tanto la vista como la instancia del componente cuando es necesario. El ciclo de vida finaliza cuando Angular realmente destruye la instancia del componente y elimina su plantilla renderizada del DOM, por lo que se llama a ngOnDestroy inmediatamente antes de que Angular destruya el componente (o directiva).
Si desea asegurarse de que la cancelación de la suscripción realmente se está produciendo, puede agregar un registro en el método ngOnDestroy o depurarlo en el navegador.
Creo que puede usar el indicador closed después de unsubscribe() para validarlo. Como ejemplo
if(!this.subscription.closed) console.error("Some error unsubscribing ?!"); Si se refiere a validar fuera del componente, entonces probablemente no pueda, ya que se llamará a ngOnDestroy solo antes de la destrucción de la instancia del componente. ¡Puede intentar emitir un evento aquí, pero probablemente llegue tarde para comprobarlo!
Sin embargo, como buena práctica, puede definir un subject en su componente y usarlo para cancelar todas sus suscripciones usando takeUntil() . Como ejemplo
export class LoginComponent implements OnInit, OnDestroy { private destroy$ = new Subject<void>(); constructor(private http: HttpClient) {} ngOnInit(): void { this.http.get("http://whatever") .pipe(takeUntil(this.destroy$)) .subscribe(value => console.log(value)); } ngOnDestroy(): void { this.destroy$.next(); this.destroy$.complete(); } }Marque esta pregunta para ver la diferencia entre tales métodos.
Angular RxJS Observable: takeUntil vs. cancelar la suscripción con una suscripción
Supongo que podrías ver que cancelaste la suscripción si no aparecen más mensajes de error. Pero entiendo tu punto. Puede iniciar sesión en el método ngOnDestroy para asegurarse de que se ejecutará y, por lo tanto, cancelar la suscripción.
O podría depurarlo con algo como la demostración que se me ocurrió aquí . Al mostrar/ocultar el componente secundario, puede ver la suscripción que está registrando un mensaje de 'ping', se inicia y se detiene en consecuencia.