如何/何时从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完成或错误