Задать вопрос
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 сервиса и добавляю запрос в очередь
  • Вопрос задан
  • 527 просмотров
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Учебный центр IBS
    WEB-022 Разработка на Angular. Продвинутый уровень
    1 неделя
    Далее
  • Учебный центр IBS
    WEB-007 Разработка на JavaScript
    1 неделя
    Далее
  • Javascript.ru
    Курс по Angular
    6 недель
    Далее
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы