我有一个后端服务,它返回我需要的多个角度组件的用户详细信息。我的问题是它显然被多次调用。这是我的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(...)