如何/何时从Observable.create返回的函数执行(rxjs)

我从' https://chrisnoring.gitbooks.io/rxjs-5-ultimate/content/observable-anatomy.html '有下面的代码:

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行的返回函数? 我们可以肯定地推断它正在被执行,因为定时器实际上正在被清除,节点正在终止程序。

清理操作函数只要观察者取消订阅,就会运行。

这包括:

  • 调用subscription.unsubscribe()
  • 使用像take()这样的操作符,在满足条件后自动取消订阅
  • 如果/当observable完成或错误