Tomando la respuesta de una API y pasándola a otra función, usando el ID de respuesta dentro de un setInterval para verificar el estado de una operación para implementar la barra de progreso.
Por cada vez que se envía el ID por API dentro de la función se devuelve el estado en cada instante.
Una vez que el estado es " ÉXITO " o "Error", necesito salir de la función y realizar el siguiente paso de operaciones bajo la llamada de función, no está sucediendo . Si el estado es " PROGRESO ", necesito que el bucle se ejecute durante 1 minuto y salga.
Aquí estoy mi caso. Estoy usando clearInterval si el estado es "ÉXITO" para romper el ciclo.
¿Por qué no sale de la función después de completar el proceso?
¿Hay alguna forma alternativa de salir del bucle después de "ÉXITO" o "Error*"?
this.userdat.sendData(data).subscribe((res:any)=>{ this.checkProgress(res.Id); //DO THIS -->Not coming here after exceuction }) checkProgress(id: any) { this.StatFlag = false; this.interval = setInterval(() => { if (!this.StatFlag) { this.userdat.operationStatus(id).subscribe((statres: any) => { switch (statres.status) { case "PROGRESS": this.stepper.selectedIndex = 1; break; case "SUCESS": this.stepper.selectedIndex = 2; this.steppershow = false; this.StatFlag = true; clearInterval(this.interval) break; case "FAILED": this.steppershow = true; clearInterval(this.interval) this.StatFlag = true; break; } }); } }, 50000); <mat-horizontal-stepper *ngIf="showsteps0" #stepper> <mat-step label="SUBMITTED" > </mat-step> <mat-step label=" IN progress" > </mat-step> <mat-step *ngIf="!steppershow" label="Complteted" > </mat-step> <mat-step label="Failed" *ngIf="steppershow"> </mat-step> </mat-horizontal-stepper> Intenté crear un nuevo bloque después de clearInterval y configurar el indicador para clearInterval , no funciona como se esperaba.
Tal vez sea un problema de alcance. En su setInterval, intente redefinir "esto".
this.interval = setInterval(() => { this.userdat.operationStatus(id).subscribe((statres: any) => { switch (statres.status) { const that = this; ... ... that.StatFlag = true; }Después del "ÉXITO"/"FRACASO", cancelar la suscripción, el intervalo funciona para mí.
this.timeInterval = this.intervalVal.subscribe(() => { this.userdat.operationStatus(id).subscribe((statres: any) => { switch (statres.status) { ... ... this.timeInterval.unsubscribe() break; }