我的任务的主要目标是创建计时器,该计时器将每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并在计时器中添加请求。