【发布时间】:2021-08-16 16:31:32
【问题描述】:
我有一个UserService,它有一个getUser 方法,该方法返回一个User 类的可观察对象。
getUser 检查用户是否已经存在,如果存在,则返回该用户,否则创建一个新用户。
当创建一个新用户时,它也会对用户的“角色”数据进行API调用,代码如下:
public getUser(): Observable<User> {
if (!UserService.user) {
UserService.user = new User();
return this.getGroups().pipe(
map(response => {
response.value.map(v => this.setRol(v));
return UserService.user;
}));
}
else {
return of(UserService.user);
}
}
但是有一个问题。
当我从两个不同的组件订阅此方法时,一个将遵循第一个 if 语句中的路径,第二个将返回 else 语句中创建的用户。
但第二个在第一个订阅完成 API 调用以获取用户所属的角色(组)之前返回创建的用户。这给了我错误。
我该如何解决这个问题?解决此问题的最佳做法是什么?
【问题讨论】:
-
UserService.user可能是可观察的,您可以使用last -
这两个组件你想要什么?但这不是竞争条件,它可以正常工作,为什么我可以向您解释。
-
@ApoorvaChikara 在这两个组件中,我都需要用户并检查用户的角色。通过调用执行 http 调用的 getGroups 方法来扮演用户的角色。但我有一种感觉,我这样做完全错了..
标签: angular rxjs race-condition subscription