代码之家  ›  专栏  ›  技术社区  ›  Obay Abd-Algader

内部任务较长的角度间隔管道

  •  1
  • Obay Abd-Algader  · 技术社区  · 6 年前

    我的组件中有以下代码:

      ngOnInit() {
        ...
        this.counterValue$ = interval(1000).pipe(
          switchMap(() => this.perfService.getCounter(this.counterUrl)),
          map(i => this.updateChart(i)),
        );
        this.counterValue$.subscribe(v => console.log(v));
      }
    

    我写这个是为了每1s更新一个图表。问题是perfService.getCounter()需要1s以上的时间才能返回。这将导致以下http请求被取消: enter image description here

    如何解决这个问题?

    2 回复  |  直到 6 年前
        1
  •  3
  •   martin    6 年前

    如果您想每1s更新一次,而大多数请求都需要1s以上的时间,那么适合您的运算符可能是 exhaustMap .

    *map 本例中的运算符:

    • switchMap interval(1000) .

    • mergeMap 会对每一次排放提出新的要求 间隔(1000) 因此,您将同时有许多挂起的请求,然后在它们到达时覆盖它们的响应

    • concatMap 会把来自 间隔(1000) 然后在它们完成时执行它们,所以如果你有一段时间的反应非常慢,然后是非常快的反应 浓缩图 将在1s之后更频繁地发出请求,因为它将首先清空它的内部缓冲区。

    • 将发出请求,然后忽略来自 间隔(1000) 直到它的内部请求完成。不管需要多长时间。然后它会等待另一个可观测到的辐射源的发射。因此,您可以保证至少有1s的延迟,同时不会产生重叠的请求。

        2
  •  0
  •   Alejandro Lora    6 年前

    SwitchMap取消事件如果另一个新事件即将出现,您是否尝试使用 tap 接线员?