typescript - setTimeout continúa cuando el usuario navega a otra página, ¿cómo usar clearTimeout en Angular TypeScript?
Usé setTimeout para saltar a la página de subida después de 10 segundos. Pero el temporizador continúa cuando el usuario navega a otra página. Seguí las instrucciones de este enlace (Angular 2 setinterval() sigue ejecutándose en otro componente) y añadí clearTimeout a ngOnDestroy, pero no funciona.
ngOnInit() {
// Get uploaded file info
this.uploadService.getFileInfo().subscribe((value) => {
this.fileInfo = value;
this.http.post(environment.apiUrl+'/api/dataValidation/validateData.php', this.fileInfo)
.subscribe(res => {
console.log('response'+res)
if (res['length']<5) {
//console.log(res);
this.failure = true;
this.fileValidationResults.errorMessage =res[0];
this.loading = false; // stop loading screen
this._timer =setTimeout(() => {
this.router.navigate(["/uploads/upload"]);
}, 10000);
}
})
});
}
ngOnDestroy() {
if (this._timer){
clearTimeout(this._timer);
};
}
¿Cómo puedo detener setTimeout() cuando el usuario navega a otro enlace y hacer que setTimeout() solo funcione en su propio componente?
Respuesta #1
Debería funcionar, recuerda declarar cuando tu componente implementa OnDestroy
Por cierto, puedes usar el operador timer de rxjs en lugar de setTimeout
import {timer} from 'rxjs'
import {takeWhile} from 'rxjs/operators'
...
export class OneComponent implements OnInit,OnDestroy {
alive:boolean=true;
ngOnInit(){
timer(1000).pipe(takeWhile(()=>this.alive)).subscribe(_=>{
this.router.navigate(['/three'])
})
}
ngOnDestroy()
{
this.alive=false;
}
}
