Вы можете рассмотреть этот подход.
destroy$ = new Subject<boolean>();
ngOnInit() {
this.startPolling();
}
ngOnDestroy(){
this.destroy$.next(true);
}
startPolling() {
this.service.getStuff().pipe(
tap(response => {
//... do stuff
}),
delay(30 * 1000), // wait for 30s before retry
repeat(),
takeUntil(this.destroy$),
).subscribe();
}
Обратите внимание, что в этом случае, если для возврата ответа бэкэнду потребуется некоторое время, с момента получения ответа начнется задержка в 30 с.
Наблюдаемый destroy$
предлагает вам возможность отменить опрос из-за действий пользователя или после уничтожения компонента.