简而言之,我在使用 RXJS 时经常遇到障碍,因为几乎每个示例都依赖于恒定的数据流,而我发出的 HTTP 请求本质上是单一的。
我的常见场景是这样的:我有一个服务可以进行 API 调用并更新必要的消费者。在我看来,这就像简单的事件发射。订阅者连接并等待事件 - 一旦他们得到它,他们就会离开并单独做自己的事情。
我相信您知道,问题在于 HTTP 订阅在完成后立即终止,并且“连接”会立即触发它。这是我仍然难以理解的 RXJS 概念。
因此,当您对该方法进行并发调用时,消费者依赖于其他消费者、forkjoins 和异步地狱——我尝试了各种涉及主题、重播、共享地图的可憎行为。我最终决定了这样的事情:
myBehaviorSubject = new BehaviorSubject<Result>(null);
myBehaviorSubject$ = myBehaviorSubject.asObservable()
...
getData(params): Observable<Result[]> {
const http$ = this.httpClient
.get('blah', {params})
.pipe(map(response => response as Result[]));
http$.subscribe(result: Result => {
myBehaviorSubject.next(result);
});
return myBehaviorSubject$;
}
感觉……不对。我知道像 mergeMap 这样的东西类似地处理内部订阅,高阶 observables 不是反模式,但我不禁认为我做错了。
内部订阅真的可以做到这一点吗?有没有办法让消费者等待 HTTP 请求而不对服务器进行冗余调用?
任何人都可以对这个问题有所了解吗?