这是不可能的.
How to work with this: RxJS的基本概念是,任何error
或complete
次调用基本上都会产生一个流.这一概念迫使您不仅要正确处理错误,还要正确处理应用程序中的数据流.例如,BehaviorSubject
通常用于保存数据,但是它也应该用于包括检索/创建该数据的过程,并处理在检索数据期间可能发生的错误.
所以如果你想要go by the book,你应该split up your flow into two parts:
- Retrieval/creation of the data:一个流,它将运行一次,然后在每次发生错误时完成和/或抛出一个错误.
- The store(例如,在您的 case 中:一堆行为子对象):只有有效数据到达存储区,这意味着这里没有进行错误处理,依赖存储区的所有部件都可以信任存储区,它保存了正确的数据.
例如,您的数据流可以如下所示(如草图所示):
store.ts
dataStore: BehaviorSubject<IData> = new BehaviorSubject<IData>();
errorMessage: BehaviorSubject<IErrorMsg> = new BehaviorSubject<IErrorMsg>();
data-retrieval.ts
fetchDataById(id: string) {
httpService.get(`some/rest/endpoint/${id}`)
.subscribe(handleData, handleError);
}
handleData(data: IData) {
errorMessage.next(null);
dataStore.next(data);
}
handleError(error: Error) {
errorMessage.next(error.message);
dataStore.next(null);
}
"But this looks like a lot of overhead..."-是的,但是它确保了应用程序中干净、易于理解的数据流,易于测试和维护.此外,还可以使用现成的store 概念,如ngrx或redux.