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
答案 0 :(得分:1)
我并非100%确定我是正确的,但通过检查来源,我认为它是这样的:
在没有任何争议的情况下致电.subscribe()
会产生call to toSubscribe()
in Observable.ts#L90。
此调用返回Subscriber
类in toSubscriber.ts#L21 return new Subscriber()
的空实例
致电Subscribe() without any parameters会创建一个empty
Observer,但确实没有任何内容。
我认为这就是问题发生的地方。当您订阅由flatMap
生成的Observable时(顺便说一下,它已经renamed to mergeMap
),它应该取消订阅Observable on error in mergeMap.ts#L12,但这种情况从未发生,因为empty
Observer does nothing on Observer.ts#L34
因此Observable不断发布值,因为Observer永远不会取消订阅。我不确定这是真的发生了什么,但如果确实如此,我不知道它是不是一个错误或一个功能。