RxJS 在 Subscription 内订阅不同数量的 Observable

Tob*_* S. 2 javascript rxjs typescript ngrx angular

在下面的代码片段中,我订阅了一个投资组合并遍历一个数组。对于数组的每个成员,我创建另一个订阅来收听其报价。

this.portfolio$
  .subscribe(portfolio) => {
    portfolio.watchlist.all.forEach((a) => {      
        this.store
          .select((s) => s.quotes.quotes[a._id])          
          .subscribe((q) => {
            console.warn('subscription')
          }
      }
    })
  })
Run Code Online (Sandbox Code Playgroud)

是否有任何 RxJS 运算符可以让我摆脱外部订阅?最后,我只想拥有与数组中的引号一样多的订阅。

bry*_*n60 6

是的,嵌套订阅是一个坏主意,您可能会在这里造成非常严重的内存泄漏。

尝试更像:

  this.portfolio$.pipe(
    switchMap(portfolio => {
      return combineLatest(portfolio.watchlist.all.map(
        a => this.store.select(s => s.quotes.quotes[a.id])
      ))
    })
  ).subscribe(combinedQ => console.log(combinedQ))
Run Code Online (Sandbox Code Playgroud)

在这里你switchMap用来切换到一个新的流,它是所有 observable 的组合,combineLatest它们将在一个数组中发出所有最新的值。