【发布时间】:2020-01-18 18:40:12
【问题描述】:
我正在尝试创建一个服务工作者,它将通过 API 向我提供有关用户的信息。
我的想法是我不想发出无用的请求,比如两次请求同一个用户,所以我试图实现一个函数来检查我们是否存储了用户数据,如果没有从服务器获取它.
我尝试使用mapTo、share、shareReplay等管道
users = new BehaviorSubject<Array<User>>([]);
getUserInfo(id: string) {
return new Observable((sub) => {
const users = this.users.getValue();
let user = users.find((u) => u._id === id);
if (user) {
sub.next(user);
sub.complete();
return;
}
this.api.get('users/' + id, this.userService.getAuthToken(), ).then((data) => {
user = new User(data, this);
users.push(user);
this.users.next(users);
sub.next(user);
sub.complete();
}).catch((err) => {
sub.error(err);
});
});
}
因此,当我使用相同的 id 同时调用 getUser 2 次时,它应该只请求一次。
【问题讨论】:
-
阅读我写的关于 Angular 状态管理的文章,其中包含我根据行为主题为这个确切用例编写的库。 medium.com/@adrianbrand/…
标签: angular typescript api rxjs observable