一定の間隔(5秒ごと)でログをポーリングするサービスを作成しようとしています。 http GETコールを行う必要がありますが、遅い接続と大きなログでは、switchMap
は以前の保留中の要求をキャンセルします。したがって、要求がキャンセルされているのでログを取得することはありません。Rxjs Observable IntervalとAngular2 HTTP:応答待ち
getLog(url:string):Observable<string> {
return Observable
.timer(0, 5000)
.switchMap(() => this.get(url))
.retryWhen(error => error.delay(5000))
.map((res:Response) => res.text())
.catch(e => {
console.warn(e.toString());
return Observable.from("");
});
}
とthis.get(url)
単にget(url) {return this.http.get(url)}
です。
私はタイマーの機能を維持しようとしていますが、以前のコールが解決されるまで別のhttpコールをトリガーしないようにしています。
[RxJavaのフラットマップとスイッチマップの違いは何ですか?](http://stackoverflow.com/questions/28175702/what-is-the-difference-between-flatmap-and-switchmap-in- rxjava) – jonrsharpe
別の言い方をすると、代わりに 'flatMap'を使います。 – jonrsharpe
@jonrsharpe 'flatMap'は新しいリクエストを作成し続けます。保留中のリクエストが終了するまで、新しいリクエストを作成したくありません。 – bomba6