没有调用catch时,Rxjs订阅

时间:2017-10-02 09:24:43

标签: rxjs rxjs5

我有以下几行代码:

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,从而订阅不被调用?不知道其他代码在哪里可能相关,如果还需要其他任何代码,我会提供它。

1 个答案:

答案 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(),因此它永远不会到达订阅者,因此无论如何都不会调用错误处理程序。