为什么我的observable没有以错误终止?

时间:2016-09-05 15:55:28

标签: angular rxjs observable rxjs5 reactivex

Observable.interval(1000)
  .flatMap(() => this.http.get('abc'))
  .subscribe(
      // x => console.log('Next: ' + x) // Don't terminite without this.
  );

此http请求因404而产生错误。但是流保持轮询。

但是,只要我在subscribe中取消注释注释行,它就会在第一个错误处终止。

参见此处的示例

http://plnkr.co/edit/bQyBvboFJCPyZUEFjraX?p=preview

为什么?

更新

似乎有一个错误,报告here

1 个答案:

答案 0 :(得分:1)

我并非100%确定我是正确的,但通过检查来源,我认为它是这样的:

  1. 在没有任何争议的情况下致电.subscribe()会产生call to toSubscribe() in Observable.ts#L90

  2. 此调用返回Subscriberin toSubscriber.ts#L21 return new Subscriber()的空实例

  3. 致电Subscribe() without any parameters会创建一个empty Observer,但确实没有任何内容。

  4. 我认为这就是问题发生的地方。当您订阅由flatMap生成的Observable时(顺便说一下,它已经renamed to mergeMap),它应该取消订阅Observable on error in mergeMap.ts#L12,但这种情况从未发生,因为empty Observer does nothing on Observer.ts#L34

  5. 因此Observable不断发布值,因为Observer永远不会取消订阅。我不确定这是真的发生了什么,但如果确实如此,我不知道它是不是一个错误或一个功能。