我有一个要缓存的用户列表,以便Angular 5应用程序中的其他组件不会访问Web服务,而是返回缓存的响应。为此,我执行了以下操作:
getAllUsers() {
return this.getUncachedUsersList().publishReplay().refCount();
}
getUncachedUsersList() {
return this.http.get('https://......');
}
在上面的代码片段中,我有两种方法。我将在所有需要用户列表的组件中调用getAllUsers,除非要添加一个用户然后需要一个更新的列表。在那种情况下,我叫“ getUncachedUsersList”来获取最新的消息。
问题是,当我调用“ getUncachedUsersList”时,我希望“ getAllUsers”可以缓存新列表,但是它会返回添加新用户之前已缓存的旧列表。因此,我想知道如何清除缓存的响应并保存从“ getUncachedUsersList”获得的新响应,并在调用“ getAllUsers”时返回新响应。
答案 0 :(得分:0)
比起这种做法,您应该考虑维护一个可缓存的Subject
。
// behavior subject do cache the latest result
// each subscribe to userList$ get the latest
userList$ = new BehaviorSubject([]);
// each time getNewUserList get call
// userList$ get the new list by calling next
getNewUserList() {
this.http.get(`http://...`).subscribe(list => this.userList$.next(list));
}