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

标签 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);

该程序的输出如下。程序在输出“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/

相关文章:

javascript - 在 Firefox 中调整 base64 图像的大小

angular - rxjs - 是否有一个always运算符?你总是怎么做某事?

javascript - Angular2 : how to initially trigger Control. 值变化

python - 刷新链接到nodeJS的python文件

node.js - 将nodejs和npm添加到Jenkins docker镜像

node.js - 如何在 window 7 32 版本中安装 bcrypt nodejs 模块

javascript - 使用 Kefir 通过多个事件改变属性的惯用方法

javascript - 是什么在我的 ajax 代码中创建了无限循环?

javascript - React 的 webkit.messageHandlers 将 JavaScript 注入(inject) Swift

javascript - 如何创建 Stripe 客户?