为什么我的可观察对象不会因错误而终止?
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% 确定我是正确的,但通过检查来源我认为它是这样发生的:
不带任何参数调用 .subscribe()
会导致 call to toSubscribe()
in Observable.ts#L90.
此调用 returns Subscriber
class in toSubscriber.ts#L21 return new Subscriber()
的一个空实例
调用 Subscribe() without any parameters creates an empty
Observer 实际上什么都不做。
我想这就是问题所在。当您订阅由 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 从不取消订阅。我不确定这是真的发生了什么,但如果真的发生了,我不知道它是错误还是功能。
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% 确定我是正确的,但通过检查来源我认为它是这样发生的:
不带任何参数调用
.subscribe()
会导致 call totoSubscribe()
in Observable.ts#L90.此调用 returns
Subscriber
class in toSubscriber.ts#L21return new Subscriber()
的一个空实例
调用 Subscribe() without any parameters creates an
empty
Observer 实际上什么都不做。我想这就是问题所在。当您订阅由
flatMap
产生的 Observable 时(顺便说一句,它是 renamed tomergeMap
) it's supposed to unsubscribe from the Observable on error in mergeMap.ts#L12 but this never happens because theempty
Observer does nothing on Observer.ts#L34.
所以 Observable 一直在发射值,因为 Observer 从不取消订阅。我不确定这是真的发生了什么,但如果真的发生了,我不知道它是错误还是功能。