我有来自“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);
该程序的输出如下。程序在“值:1”输出后自动终止。
> node index.js
Value: 0
Value: 1
由于语句返回一个函数引用并且返回函数没有在外面调用,我的问题是,第11行的返回函数是如何/何时执行的?我们可以肯定地推断它正在执行,因为定时器实际上已被清除并且节点正在终止该程序。
答案 0 :(得分:1)
只要观察者取消订阅其订阅,就会运行清理操作函数。
这包括:
subscription.unsubscribe()
take()
之类的运算符,在满足条件后自动取消订阅