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

时间:2017-06-21 15:58:30

标签: javascript node.js 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);

该程序的输出如下。程序在“值:1”输出后自动终止。

> node index.js

Value:  0
Value:  1

由于语句返回一个函数引用并且返回函数没有在外面调用,我的问题是,第11行的返回函数是如何/何时执行的?我们可以肯定地推断它正在执行,因为定时器实际上已被清除并且节点正在终止该程序。

1 个答案:

答案 0 :(得分:1)

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

这包括:

  • 致电subscription.unsubscribe()
  • 使用像take()之类的运算符,在满足条件后自动取消订阅
  • if / when observable完成或错误