一方面,我有一个偶尔会抛出错误的流:
this.behaviorSubject.error(error)
然而,稍后,我想继续直播:
this.behaviorSubject.next(anotherValue)
在另一端,我有一个订阅者订阅了 behaviorSubject.asObservable()
。
在订阅中,我正在处理值和错误:
.subscribe(
( value ) => { /* ok */ },
( error ) => { /* some error */ }
);
我希望效果与简单的 onSuccess
和 onError
回调相同,其中 onError
onSuccess
发生错误时都会调用,并且不会 ---
正在拨打电话。我如何使用 RXJS 执行此操作?
我已经研究了 catch,但它似乎只是防止错误被订阅者调用。
原文由 David 发布,翻译遵循 CC BY-SA 4.0 许可协议
简短的回答: 这是不可能的。
如何处理: RxJS 的基本概念是任何
error
或complete
调用基本上会 “杀死” 一个流。这个概念迫使您不能 “随心所欲地在这里和那里抛出错误” ,而是要正确处理应用程序中的错误和数据流。 ABehaviorSubject
例如通常用于保存数据,但它 不 应用于还包括检索/创建该数据的过程以及处理在检索数据期间可能发生的可能错误。所以如果你想 _照章办事_,你应该 把你的流程分成两部分:
例如,您的数据流可能如下所示(作为粗略草图):
商店.ts
数据检索.ts
“但这看起来开销很大……” - 没错,但它确保应用程序中的数据流干净且易于理解,易于测试和维护。也有现成的存储概念,如 ngrx 或 redux 可以使用。