gpt4 book ai didi

angular - Rxjs 可观察间隔和 Angular2 HTTP : wait for response

转载 作者:太空狗 更新时间:2023-10-29 17:52:11 26 4
gpt4 key购买 nike

我正在尝试创建一个以给定时间间隔(每 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 调用,并且不取消挂起的调用。

最佳答案

使用 concatMap() 而不是 switchMap()

正如您所说,switchMap() 运算符取消了之前的请求。 flatMap()(或 mergeMap())运算符只是创建另一个 Observable 并立即订阅所有这些对象。

另一方面,concatMap() 运算符会等待直到前一个 Observable 完成,然后订阅下一个 Observable。因此,即使您的计时器发出的速度快于请求完成的速度,您也将始终以相同的顺序收到所有响应。

关于angular - Rxjs 可观察间隔和 Angular2 HTTP : wait for response,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43304316/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com