RxJs 将可观察对象与订阅链接起来

RxJs chaining observables with subscriptions

我有一个表单,其中包含通过调用 API.

检索的块

我需要根据那个特定的调用来处理每个调用(我正在根据那个调用创建一个 formGroup 部分)。

我想要的是拥有某种全局 observable/status,它将在所有调用都已发出并处理后完成。

现在我通过创建一个 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(),但我认为这不对。

如果顺序不是问题,您可以使用 rxjs 中的 forkJoin,其工作方式类似于 Promise.all、

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

请使用 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 :