Javascript RxJS在订阅中订阅不同数量的可观察对象
在下面的代码片段中,我订阅了一个公文包并遍历了一个数组。对于数组中的每个成员,我创建另一个订阅以侦听其引用Javascript RxJS在订阅中订阅不同数量的可观察对象,javascript,angular,typescript,rxjs,ngrx,Javascript,Angular,Typescript,Rxjs,Ngrx,在下面的代码片段中,我订阅了一个公文包并遍历了一个数组。对于数组中的每个成员,我创建另一个订阅以侦听其引用 this.portfolio$ .subscribe(portfolio) => { portfolio.watchlist.all.forEach((a) => { this.store .select((s) => s.quotes.quotes[a._id]) .su
this.portfolio$
.subscribe(portfolio) => {
portfolio.watchlist.all.forEach((a) => {
this.store
.select((s) => s.quotes.quotes[a._id])
.subscribe((q) => {
console.warn('subscription')
}
}
})
})
有没有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))
在这里,您使用
switchMap
切换到一个新的流,它是combinelateest
中组合的所有可观察对象,将在一个数组中发出所有最新值。是嵌套订阅是一个坏主意,您可能在这里造成了相当严重的内存泄漏
请尝试以下方式:
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))
在这里,您可以使用switchMap
切换到一个新的流,该流是在combinelateest
中组合的所有观察值,它将在一个数组中发出所有最新的值