Rxjs上的异步定时器

时间:2016-12-28 13:46:46

标签: angular angular2-services rxjs5

我的任务的主要目标是创建计时器,该计时器将每n秒启动一次。该项目正在写角度2,所以最好的方法是使用Observable。

所以我想做的事情:

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);
        }
    }
}

例如我在页面上有很少的组件。每个组件自己获取数据。组件应每10秒更新一次。所以我正在注入AsyncTimer并在计时器中添加请求。

0 个答案:

没有答案