RxJs链接可观察的订阅

时间:2019-02-20 14:05:40

标签: angular typescript rxjs request-queueing

我有一种形式,其中包含通过调用API检索的块。

我需要根据该特定调用来处理每个调用(我正在基于该调用创建formGroup部件)。

我想要的是具有某种全局的可观察/状态,将在进行和处理所有呼叫时完成。

现在,我通过创建BehaviorSubject计数器来做到这一点,并在每次请求时都增加它。当此计数器达到某个值时,我将loading更改为false并显示一个表格。有更好的方法吗?

看起来像

o1.subscribe(() => {... this.counter.next(this.counter.value + 1) });
o2.subscribe(() => {... this.counter.next(this.counter.value + 1) });
o3.subscribe(() => {... this.counter.next(this.counter.value + 1) });

this.counter.subscribe(val => if (val === 3) { this.loading = false; }

我曾经考虑过创建of()包装器,并在其周围使用concat(),但我认为这是不对的。

2 个答案:

答案 0 :(得分:1)

如果不关心订单,则可以使用rxjs中的forkJoin,其工作原理类似于Promise.all,

 forkJoin([...requests])
   .subscribe(_ => this.loading = false;) 

答案 1 :(得分:-1)

请使用RxJs中的forkjoin

Plunker Demo link

 ngOnInit() {
    forkJoin(
      this._myService.makeRequest('Request One', 2000),
      this._myService.makeRequest('Request Two', 1000) 
      this._myService.makeRequest('Request Three', 3000) 
    )
    .subscribe(([res1, res2, res3]) => {
      this.propOne = res1;
      this.propTwo = res2;
      this.propThree = res3;
    });
  }

Ref from :