未调用 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 通知。您可以重写它以处理 errors:

.subscribe(
  () => console.log('subscribe'),
  err => console.log('error:', err), 
)

但是您使用的是 catch 并且您基本上用 Observable.empty() 替换了错误,因此它永远不会到达订阅者,因此无论如何都不会调用错误处理程序。