Rxjs可观测间隔和Angular2 HTTP:等待响应
我正在尝试创建一个以给定间隔(每5秒)轮询日志的服务。我需要进行http GET调用,但是在连接速度慢且日志大的情况下,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
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
。@jornsharpeflatMap
不断创建新请求。在挂起的请求完成之前,我不想创建新的请求。哦,我认为请求被取消是个问题;请澄清您正在寻找的行为。