【问题标题】:Update cached data using rxjs publishReplay: Angular 5使用 rxjs publishReplay 更新缓存数据:Angular 5
【发布时间】:2018-12-27 22:30:29
【问题描述】:

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

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

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

在上面的代码sn-p中,我有两种方法。我在需要用户列表的所有组件中调用 getAllUsers,除非假设我正在添加一个用户,然后我需要一个更新的列表。在这种情况下,我会调用“getUncachedUsersList”来获取最新信息。

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

【问题讨论】:

  • 在您的情况下,getAllUsers() 实际上并不是缓存数据。如果您调用该方法两次并同时订阅,您将看到 2 个网络调用被触发。您需要以某种方式存储Observable 引用。顺便说一句,t7yang-s 的答案对你有用

标签: rxjs rxjs5


【解决方案1】:

除了这样做,你应该考虑维护一个可缓存的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));
}

【讨论】:

    猜你喜欢
    • 2017-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多