如何使用 RXJS 计时器实现 HTTP 轮询器



在我的一个角度项目中,我使用 rxjs 计时器实现了一个 http 轮询器。 每当HTTP响应延迟超过轮询间隔时,待处理的请求就会被取消。

所使用的逻辑在 https://rxviz.com/v/VOKjA9Mo 中演示。此处预期结果为 1 到 5。但似乎有时模拟ApiCall可观察量是随机取消的(当响应时间为800毫秒时(。

let n = 0
function mockApiCall(){
// delays 400 or 800 millis randomly
n++
return Rx.Observable.of([n])
.delay(400 + Math.round(Math.random()) * 400)
}
Rx.Observable
.timer(500, 500)
.switchMap( _=>mockApiCall()).take(5)

如何避免取消此计时器中使用的内部可观察量。 即计时器应等到 API 调用完成。

看起来你正在寻找exhaustMap而不是switchMap(我对你的描述有点困惑(:

将每个源值投影到一个可观察量,仅当上一个投影的可观察量已完成时,该可观察量才会合并到输出可观察量中。

最新更新