【发布时间】:2017-09-04 09:13:39
【问题描述】:
我正在尝试创建一个以给定时间间隔(每 5 秒)轮询日志的服务。我需要进行 http GET 调用,但在连接速度较慢和日志较大的情况下,switchMap 会取消之前的待处理请求。因此,由于请求被取消,我永远不会收到日志。
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 调用,并且不取消挂起的调用。
【问题讨论】:
-
换一种说法:改用
flatMap。 -
@jonrsharpe
flatMap不断创建新请求。在挂起的请求完成之前,我不想创建新请求。 -
哦,我认为被取消的请求是问题所在;请edit 澄清您正在寻找的行为。
标签: angular http rxjs observable intervals