我有来自“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 行的返回函数如何/何时执行?我们可以肯定地推断它正在执行,因为计时器实际上被清除并且 Node 正在终止程序。
最佳答案
每当观察者取消订阅时,清理操作函数就会运行。
这包括:
- 调用
subscription.unsubscribe()
- 使用像
take()
这样的运算符,在满足条件后自动取消订阅 - 如果/当可观察完成或发生错误时
关于javascript - 从 Observable.create 返回的函数如何/何时执行(rxjs),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44681005/