这个 Observable 会造成内存泄漏吗?

Will this Observable create a memory leak?

这个 Observable 会造成内存泄漏吗? 因为每次你 运行 它,它都会保持初始 select 流打开?!?!

return this.store.select(store => store.appDb.appBaseUrl)                          
            .mergeMap(url => {
                return this.http.get(url)
                    .debug('received ' + url)
                    .map(res => res.json())
            })

如果是这样,添加 take(1) 是否可以解决问题?

return this.store.select(store => store.appDb.appBaseUrl)                          
               .take(1) // <--------------- stop after 1?
               .mergeMap(url => {
                return this.http.get(url)
                    .debug('received ' + url)
                    .map(res => res.json())
            })

发送肖恩

仅仅拥有一个热可观察对象 this.store.select 并不立即意味着您有内存泄漏。您的任务是在该可观察对象上存储对您的订阅的引用,并在完成后将其处置。

我发现用 .take(X) 注释我的流是很有帮助的,这是我知道我期望有多少元素时做的最后一件事,因为这将使流在发出预期数量后自动处理。

return this.store.select(store => store.appDb.appBaseUrl)                          
  .mergeMap(url => this.http.get(url)
    .debug('received ' + url)
    .map(res => res.json())
  )
  .take(1)