2016-08-14 116 views
7

我一直在用這個模式:如何取消訂閱RxJS 5可觀察項?

func myObservable() Observable<boolean> { 
    ... 
} 

func myFunc() { 
    myObservable().subscribe((cond: boolean) => { 
     if (cond) { 
      // How do I unsubscribe here? 
     } 
    }); 
} 

但是我看不到任何退訂方式從而創造可能內存泄漏。

我問的原因是因爲Angular 2's HTTP client使用相同的模式 - 雖然我相信它自動取消訂閱,我也想這樣做。

+1

您需要存儲的返回值是一個'Subscription',並從取消。 –

回答

11

你應該做這樣的事情:

func myFunc() { 
    var subscription = myObservable().subscribe((cond: boolean) => { 
     if (cond) { 
      // How do I unsubscribe here? 
      subscription.unsubscribe() 
     } 
    }); 
} 
+0

我不知道你可以成功捕獲一個函數內的值,該函數在函數構造完成之後纔會被聲明。大多數語言不會允許這樣做。謝謝。 – Dan

+0

這是一個回調,實際上是另一個函數,稍後會在確定的事件中調用 –