Обновите кэшированные данные с помощью rxjs publishReplay: Angular 5 - PullRequest
0 голосов
/ 28 декабря 2018

У меня есть список пользователей, которых я хочу кэшировать, чтобы другой компонент в моем приложении Angular 5 не попадал в веб-службу, а скорее возвращал кэшированный ответ.Для этого я сделал следующее:

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

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

В приведенном выше фрагменте кода у меня есть два метода.Я вызываю getAllUsers внутри всех компонентов, которым нужен список пользователей, за исключением случая, когда, скажем, я добавляю пользователя, а затем мне нужен обновленный список.В этом случае я вызываю getUncachedUsersList для получения последней версии.

Проблема в том, что когда я вызываю getUncachedUsersList, я ожидаю, что getAllUsers кеширует новый список, но вместо этого возвращает тот же старый список, которыйбыл кэширован перед добавлением нового пользователя.Поэтому я хотел бы знать, как я могу очистить кэшированный ответ и сохранить новый ответ, который я получаю из getUncachedUsersList, и вернуть новый ответ при вызове getAllUsers.

1 Ответ

0 голосов
/ 28 декабря 2018

Ратар, чем делать это, вы должны рассмотреть возможность сохранения в кэше 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));
}
...