如何使用RxJS共享运算符共享Angular httpClient.get调用?

时间:2018-10-01 08:16:05

标签: angular rxjs

有人可以帮我解决这个问题吗?

我有一项服务,该服务通过httpClient.get()调用从服务器获取一些数据。

我还有一个使用此服务并显示此数据具体信息的组件。 问题是我需要在同一页面/视图中使该组件3次或4次,以显示来自同一调用的不同具体数据,并且由于应用程序体系结构,该组件必须由谁来进行调用。

如何检测到该呼叫已经执行并重用?

我当时在考虑RxJS运算符share甚至是shareReplay,但在说明的情况下,我不知道如何清楚地使用它。

谢谢。

1 个答案:

答案 0 :(得分:2)

发出一个Http请求并处理缓存/存储的数据。使用以下方法

export class SharedService {

    private data$: Observable<User>;
    private getUser(): void {

        this.data$ = this.http
            .get<User>(BACKENDPATH).pipe(shareReplay(1));

    }

    getData(): Observable<User> {
        if (!this.data$) {
           this.getUser();
        }
        return this.data$;
    }
}

组件:

this.service.getData().subscribe(...)