为什么我的可观察对象不会因错误而终止?

Why doesn't my observable terminate at error?

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

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

  1. 不带任何参数调用 .subscribe() 会导致 call to toSubscribe() in Observable.ts#L90.

  2. 此调用 returns Subscriber class in toSubscriber.ts#L21 return new Subscriber()

  3. 的一个空实例
  4. 调用 Subscribe() without any parameters creates an empty Observer 实际上什么都不做。

  5. 我想这就是问题所在。当您订阅由 flatMap 产生的 Observable 时(顺便说一句,它是 renamed to mergeMap) it's supposed to unsubscribe from the Observable on error in mergeMap.ts#L12 but this never happens because the empty Observer does nothing on Observer.ts#L34.

所以 Observable 一直在发射值,因为 Observer 从不取消订阅。我不确定这是真的发生了什么,但如果真的发生了,我不知道它是错误还是功能。