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 运算符可以让我摆脱外部订阅?最后,我只想拥有与数组中的引号一样多的订阅。
是的,嵌套订阅是一个坏主意,您可能会在这里造成非常严重的内存泄漏。
尝试更像:
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它们将在一个数组中发出所有最新的值。
| 归档时间: |
|
| 查看次数: |
52 次 |
| 最近记录: |