Основная идея - сделать таймер, который будет запускаться каждые n секунд после того, как все запросы будут завершены. Т.к. проект пишется на Angular 2, то надо бы это сделать на rxjs
Вот, что я попробовал сделать:
export interface IAsyncTimer {
timerObservable: Observable<any>
observables: Array<Observable<any>>
}
@Injectable()
export class AsyncTimer {
private timers: Map<number, IAsyncTimer> = new Map<number, IAsyncTimer>();
public addTimer(time: number,
func: Observable<any>) {
let timer = this.timers.get(time);
if (!!timer) {
timer.observables.push(func);
}
else {
let observable = Observable.interval(time)
.timeInterval(),
timer = {
timerObservable: observable,
observables : [func]
};
timer.timerObservable.switchMap(Observable.forkJoin.apply(Observable, timer.observables)).subscribe(() => {});
this.timers.set(time, timer);
}
}
}
Например, на странице у меня есть несколько компонентов. Каждый из них хранит логику получения данных внутри себя. Нужно, чтобы они обновлялись раз в определённое количество секунд. Я делаю inject сервиса и добавляю запрос в очередь