2016-12-28 47 views
0

這個Observable會造成內存泄漏嗎?因爲每當你運行它時,它會保持最初的選擇流打開?!?!這個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肖恩

回答

1

只要有一個熱點觀察到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) 
+0

我明白了,訂閱是由效果庫管理的,但我確實多次調用這個動作。 – born2net