如何使用rxjs计时器实现http轮询器

时间:2018-05-28 11:13:02

标签: angular rxjs angular5

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

使用的逻辑在https://rxviz.com/v/VOKjA9Mo处演示。这里预期的结果是1到5.但似乎有时mockApiCall observable被随机取消(当响应时间为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呼叫结束。

1 个答案:

答案 0 :(得分:1)

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

  

将每个源值投影到Observable,该Observable仅在先前投影的Observable已完成时才合并到输出Observable中。

相关问题