这个Observable是否会造成内存泄漏?

时间:2016-12-28 20:51:50

标签: rxjs rxjs5

这个Observable是否会造成内存泄漏? 因为每次运行它都会保持初始选择流打开?!?!

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())
            })

tx Sean

1 个答案:

答案 0 :(得分:1)

简单地拥有一个热的可观察this.store.select并不会立即暗示你有内存泄漏。您的任务是在该observable上存储对您的订阅的引用,并在完成后将其丢弃。

当我知道我期望有多少元素时,我发现使用.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)