我有一个后端服务,它返回我需要的多个角度组件的用户详细信息。我的问题是它显然被多次调用。这是我的get请求:

getUser(): Observable<User> {
  if (this.user) {
    return Observable.of(this.user);
  } else {
    return this.http
      .get<User>(BACKENDPATH)
      .map((user: User) => new User().deserialise(user))
      .do((user) => {
        this.user = user;
        console.log(this.user.getUserName());
        return this.user;
      });
   }
}

在函数的get部分之后,我尝试了以下方法,但都没有成功:
.publishreplay(1).refcount()
.shareplay()
.共享重播(1)
这些方法已经在网上为其他人工作了,所以我猜我在实现它们的时候做了一些错误的事情,但是我不知道是什么。

最佳答案

您正在使用每个getUser()调用创建一个新流。
解决方案:发出一个Http请求并处理缓存/存储的数据。使用下面的方法

export class SharedService {

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

        this.data$ = this.http
            .get<User>(BACKENDPATH)
            .map((user: User) => new User().deserialise(user))
            .do((user) => {
                this.user = user;
                console.log(this.user.getUserName());
                return this.user;
            }).shareReplay(1);
    }

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

组成部分:
this.service.getData().sub(...)

08-25 14:35
查看更多