未调用 catch 后的 Rxjs 订阅
Rxjs subscribe after catch is not called
我有以下几行代码:
this.initializer.initialize()
.catch((e) => { console.log('catch'); return Observable.empty() })
.flatMap(() => { console.log('flatmap'); return this.route.params })
.subscribe(() => { console.log('subscribe'); })
记录的输出是
catch
什么可能导致 flatMap
以及订阅未被调用?不确定还有哪些其他代码与此相关,如果需要任何其他代码,我会提供。
这显然是由 this.initializer.initialize()
发出 error
通知引起的(这是故意的吗?)。
catch
操作员仅对 error
通知作出反应,next
也不会 complete
。
flatMap()
操作员仅对 next
通知作出反应,error
也不会 complete
。
您现在拥有的 subscribe
调用仅处理 next
通知。您可以重写它以处理 error
s:
.subscribe(
() => console.log('subscribe'),
err => console.log('error:', err),
)
但是您使用的是 catch
并且您基本上用 Observable.empty()
替换了错误,因此它永远不会到达订阅者,因此无论如何都不会调用错误处理程序。
我有以下几行代码:
this.initializer.initialize()
.catch((e) => { console.log('catch'); return Observable.empty() })
.flatMap(() => { console.log('flatmap'); return this.route.params })
.subscribe(() => { console.log('subscribe'); })
记录的输出是
catch
什么可能导致 flatMap
以及订阅未被调用?不确定还有哪些其他代码与此相关,如果需要任何其他代码,我会提供。
这显然是由 this.initializer.initialize()
发出 error
通知引起的(这是故意的吗?)。
catch
操作员仅对 error
通知作出反应,next
也不会 complete
。
flatMap()
操作员仅对 next
通知作出反应,error
也不会 complete
。
您现在拥有的 subscribe
调用仅处理 next
通知。您可以重写它以处理 error
s:
.subscribe(
() => console.log('subscribe'),
err => console.log('error:', err),
)
但是您使用的是 catch
并且您基本上用 Observable.empty()
替换了错误,因此它永远不会到达订阅者,因此无论如何都不会调用错误处理程序。