Rxjs可观测间隔和Angular2 HTTP:等待响应

Rxjs可观测间隔和Angular2 HTTP:等待响应,angular,http,rxjs,observable,intervals,Angular,Http,Rxjs,Observable,Intervals,我正在尝试创建一个以给定间隔(每5秒)轮询日志的服务。我需要进行http GET调用,但是在连接速度慢且日志大的情况下,switchMap会取消先前挂起的请求。因此,当请求被取消时,我永远不会得到日志 getLog(url:string):可观察{ 可观测回波 .计时器(0,5000) .switchMap(()=>this.get(url)) .retryWhen(error=>error.delay(5000)) .map((res:Response)=>res.text()) .catch

我正在尝试创建一个以给定间隔(每5秒)轮询日志的服务。我需要进行http GET调用,但是在连接速度慢且日志大的情况下,
switchMap
会取消先前挂起的请求。因此,当请求被取消时,我永远不会得到日志

getLog(url:string):可观察{
可观测回波
.计时器(0,5000)
.switchMap(()=>this.get(url))
.retryWhen(error=>error.delay(5000))
.map((res:Response)=>res.text())
.catch(e=>{
console.warn(例如toString());
可观察的返回。从(“”);
});
}
this.get(url)
只是
get(url){返回this.http.get(url)}

我希望保留计时器功能,但在前一个调用解决之前不要触发另一个http调用,也不要取消挂起的调用。

使用
concatMap()
而不是
switchMap()

正如您所说的,
switchMap()
操作符取消以前的请求。
flatMap()
(或
mergeMap()
)操作符只是创建另一个可观察对象并立即订阅所有对象


另一方面,
concatMap()
操作符等待上一个可观察对象完成,然后订阅下一个可观察对象。因此,即使您的计时器发出的速度快于请求完成的速度,您也将始终以相同的顺序接收它们的所有响应

换言之,可能的重复:改用
flatMap
。@jornsharpe
flatMap
不断创建新请求。在挂起的请求完成之前,我不想创建新的请求。哦,我认为请求被取消是个问题;请澄清您正在寻找的行为。