Estoy tratando de hacer una cuenta regresiva de 5 minutos que active un método de servicio y vuelva a cargar la cuenta regresiva de 5 minutos (básicamente, estoy tratando de recargar algunos datos cada 5 minutos)
constructor( private reloadDataService: ReloadDataService, private userService: UserService ) { this.timer$ = timer(0, 1000).pipe( scan(acc => --acc, 300), takeWhile(x => x >= 0), ); }El método realod se activa con un botón o cada 5 minutos
reload() { this.lastRefresh = new Date(); this.reloadDataService.reload() } ngOnInit() { this.getUserDetails(); }he probado con
this.timer$ = timer(0, 1000).pipe( switchMap(() => this.reload()), scan(acc => --acc, 300), takeWhile(x => x >= 0), );pero no funcionó. ¿Cómo puedo activar el método de recarga cada 5 minutos?
use la propiedad de suscripción del temporizador,
const source = timer(0, 300000); source.subscribe((_) => this.reload());Pruebe el siguiente código. Configurará el método de intervalo y al suscribirse a refreshInterval$ puede llamar al método de recarga o cualquier operación que desee repetir.
const refreshInterval$: Observable<any> = timer(0, 300000) .pipe( // Boolean to kill the request if the user closes the component takeWhile(() => this.killTrigger)); refreshInterval$.subscribe(() => { // Your code here });Una forma es mediante el uso de la función de intervalo o temporizador que ofrece rxjs.
Aquí hay un ejemplo que creé.
countDown: Subscription = null; minutes: number = 5; counter: number = this.minutes * 60; triggered: number = 0;función de temporizador de inicio
startTimer(): void { this.countDown ? this.stopTimer() : null; this.countDown = interval(1000).subscribe(() => { --this.counter; if (!this.counter) { this.trigger(); } }); }detener la función de temporizador
stopTimer(): void { if (this.countDown) { this.countDown.unsubscribe(); this.countDown = null; } }función de activación que se ejecuta cuando finaliza la cuenta regresiva
trigger(): void { this.counter = this.minutes * 60; this.stopTimer(); // unsubscribe timer this.startTimer(); // re subscribe timer this.triggered++; // your code }ejemplo de interfaz de usuario de codesandbox
Espero que esto te ayude, avísame si construyes otra solución.
Los mejores deseos,
Dev.klodian