Illorian
@Illorian
Front-end разработчик

Как сделать асинхронный таймер с помощью rxjs?

Основная идея - сделать таймер, который будет запускаться каждые 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 сервиса и добавляю запрос в очередь
  • Вопрос задан
  • 513 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы