使用rxjs publishReplay更新缓存的数据:Angular 5

时间:2018-12-27 22:30:29

标签: rxjs rxjs5

我有一个要缓存的用户列表,以便Angular 5应用程序中的其他组件不会访问Web服务,而是返回缓存的响应。为此,我执行了以下操作:

getAllUsers() {
  return this.getUncachedUsersList().publishReplay().refCount();
}

getUncachedUsersList() {
  return this.http.get('https://......');
}

在上面的代码片段中,我有两种方法。我将在所有需要用户列表的组件中调用getAllUsers,除非要添加一个用户然后需要一个更新的列表。在那种情况下,我叫“ getUncachedUsersList”来获取最新的消息。

问题是,当我调用“ getUncachedUsersList”时,我希望“ getAllUsers”可以缓存新列表,但是它会返回添加新用户之前已缓存的旧列表。因此,我想知道如何清除缓存的响应并保存从“ getUncachedUsersList”获得的新响应,并在调用“ getAllUsers”时返回新响应。

1 个答案:

答案 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));
}