В приведенном ниже коде я сделал рекурсивный вызов. При первом вызове он будет учитывать начальную задержку, после этого он будет учитывать только интервал опыления и будет опрашивать после ожидания до периода опыления, но после получения ответа
import { Component, OnInit } from "@angular/core";
import { Observable, of } from "rxjs";
import { delay, switchMap, map, mergeMap } from "rxjs/operators";
@Component({
selector: "my-app",
templateUrl: "./app.component.html",
styleUrls: ["./app.component.css"]
})
export class AppComponent implements OnInit {
name = "Angular 6";
ngOnInit() {
this.pollConsoleHealth(1000, 4000).subscribe();
}
getConsoleHealth(): Observable<any> {
console.log("next Call" + new Date());
return of("newData").pipe(delay(20000));
}
pollConsoleHealth(
initialDelay: number,
pollInterval: number
): Observable<any> {
return of([]).pipe(
delay(initialDelay),
delay(pollInterval),
switchMap(() =>
this.getConsoleHealth().pipe(
switchMap(res => this.pollConsoleHealth(0, pollInterval))
)
)
);
}
}
URL-адрес Stackblitz: - https://stackblitz.com/edit/hello-angular-6-vivvvz