2017-06-21 67 views
1

我已經從「https://chrisnoring.gitbooks.io/rxjs-5-ultimate/content/observable-anatomy.html」以下代碼:如何/何時從Observable.create返回的函數執行(rxjs)

const Observable = require('rxjs/Observable').Observable; 
require('rxjs/add/observable/of'); 
require('rxjs/add/operator/map'); 

let stream = Observable.create((observer) => { 
    let i = 0; 
    let id = setInterval(() => { 
    observer.next(i++); 
    }, 500); 

    return function() { // Line 11 
    clearInterval(id); 
    }; 
}) 

let subscription = stream.subscribe((value) => { 
    console.log('Value: ', value); 
}) 

setTimeout(() => { 
    subscription.unsubscribe(); 
}, 1500); 

該程序的輸出是下面。 'Value:1'輸出後程序自動終止。

> node index.js 

Value: 0 
Value: 1 

由於語句返回一個函數引用和返回功能沒有得到以外的任何地方叫,是,如何/何時從線路11返回功能被執行我的問題?我們可以肯定地推斷它正在被執行,因爲定時器實際上已經被清除,節點正在終止程序。

回答

1

清理操作函數在觀察者取消訂閱訂閱時運行。

這包括:

  • 使用一些操作者像take()一個條件被滿足
  • 後自動地調用退訂subscription.unsubscribe()
  • 如果/當可觀察到的完成或錯誤