【发布时间】:2020-10-15 16:15:22
【问题描述】:
我目前在尝试使用 publishReplay 和 refCount 更新缓存值时遇到了一些麻烦。
首先,有问题的方法
getCurrentUser(): Observable<User> {
if (!this.jwtService.getToken() || this.jwtService.getAnonymousToken()) { return of(null); }
if (!this.currentUser$) {
console.warn('user.service.getcurrentuser -> load and CACHE it once');
this.currentUser$ = this.userService.loadCurrentUser().pipe(
// https://medium.com/angular-in-depth/fastest-way-to-cache-for-lazy-developers-angular-with-rxjs-444a198ed6a6
publishReplay(1),
refCount()
);
}
console.log('user.service.getcurrentuser -> get from CACHE');
return this.currentUser$;
}
this.currentUser$ 是 User 类型的 Observable。
该方法本身按预期工作,该方法的第一次调用从服务器加载当前用户。随后的调用将获取缓存的条目。 然而,我现在要做的是删除缓存的值并从服务器重新加载用户(即在前端编辑了某些内容并且需要重新加载用户数据)。
我做到了
removeCachedUser(): void {
this.currentUser$ = null;
}
通过这样做,getCurrentUser 方法中的if 条件被触发,用户从服务器重新加载。到目前为止,一切顺利。
我面临的问题是在缓存重置之前订阅getCurrentUser 的方法没有收到任何更新,即
ngOnInit() {
this.currentUser$ = this.authService.getCurrentUser();
}
我怀疑这是因为我覆盖了this.currentUser$ Observable。
this.currentUser$ = this.userService.loadCurrentUser()
This post 或多或少地证实了我的理论。
我说的对吗?如果是这样,处理这个问题的正确方法是什么?不幸的是,我没有反应式后端,所以我必须手动触发重新加载。提前致谢!
【问题讨论】:
标签: angular typescript rxjs