Estoy tratando de obtener el estado del backend hasta que se cumpla la condición, pero no quiero sobrecargar el servidor haciendo una solicitud para siempre :). Quiero dejar de hacer solicitudes después de un minuto. aquí está el código
this.statusService .getStatus(this.itemId).pipe( repeatWhen(obs => obs.pipe(delay(500))), filter(data => { if(data.status === 'done'){ return true; }else{ return false; } }), take(1) ).subscribe(result =>{ console.log('done') });Intenté el tiempo de espera () pero no deja de hacer la solicitud
this.statusService .getStatus(this.itemId).pipe( timeout(60000), repeatWhen(obs => obs.pipe(delay(500))), filter(data => { if(data.status === 'done'){ return true; }else{ return false; } }), take(1) ).subscribe(result =>{ console.log('done') });ACTUALIZADO:
Una solución simple puede ser:
const apiCall$ = this.statusService.getStatus(this.itemId) .pipe( delay(1000), repeat(), filter(data => (data.status === 'done')) ); const timeout$ = of(false).pipe(delay(3000)); // The observable to emit first is used race([apiCall$, timeout$]) .pipe(take(1)) .subscribe(result => { console.log(result); });