我有以下几行代码:
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
,从而订阅不被调用?不知道其他代码在哪里可能相关,如果还需要其他任何代码,我会提供它。
答案 0 :(得分:2)
这显然是由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()
,因此它永远不会到达订阅者,因此无论如何都不会调用错误处理程序。