我正在ng-cli
使用Angular 2
和RxJs
。我正在尝试做的简单解释是:我正在使用 RxJs 不断地将 XHR 生成到后端 REST 端点。我注意到,如果我制作这些 XHR 的频率是 100 毫秒、500 毫秒甚至 1000 毫秒,通过查看 Chrome/FireFox 开发者工具的网络视图,我可以看到很多 XHR 处于待处理状态;它们开始需要 200 毫秒到 1.5 秒,但随着 XHR 数量的增加,这些请求需要 10 秒到 20 秒才能完成;它们堆积起来,所有后来的 XHR 最终都处于未决状态。
我TypeScript
与RxJs
对象一起使用的代码如下所示。
private initStreaming(): void {
this.playSubject = new Subject<boolean>();
this.pauseSubject = new Subject<boolean>();
let interval = Observable.interval(100)
.map(() => this.myService.queryTransactions(this.getQueryRequest()))
.flatMap(v => v);
let pause = Observable.from(this.pauseSubject).mapTo(Observable.of(false));
let resume = Observable.from(this.playSubject).mapTo(interval);
this.timer = Observable
.merge(pause, resume)
.startWith(interval)
.switchMap<Observable<boolean> | Observable<QueryResponse>, boolean | QueryResponse>(v => v)
.scan<boolean | QueryResponse, QueryResponse>((acc, curr) => {
if (curr && typeof curr === 'boolean') {
return acc;
} else {
return curr as QueryResponse;
}
}, undefined);
this.subscription = this.timer.subscribe(
data => {
if (undefined !== data && undefined !== data.transactions) {
if (this.queryResponse === undefined) {
this.queryResponse = data;
} else if (this.queryResponse && data) {
if (this.shouldSwap(this.queryResponse, data)) {
this.queryResponse = data;
}
}
}
}
);
}
我已经阅读过websockets
,这可能是将数据(如果它在服务器上更改)推送到客户端的更好方法,而不是这种拉数据的方法(无论它是否在服务器上更改)。但那是另一篇文章,IMO。
无论如何,关于如何改进此代码的任何想法?