4
我试图创建一个服务,以给定的间隔(每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中的flatmap和switchmap有什么不同?](http://stackoverflow.com/questions/28175702/what-is-the-difference-between-flatmap-and-switchmap-in- rxjava) – jonrsharpe
换句话说:改用'flatMap'。 – jonrsharpe
@jonrsharpe'flatMap'不断创建新的请求。我不想在挂起的请求完成之前创建新的请求。 – bomba6