Когда я делаю GET-запрос на получение логотипа, я сохраняю логотип как JSON в LocalStorage, чтобы я мог получить его оттуда в следующий раз, не выполняя еще один http-запрос:
getLogo(): Observable<Picture> {
const cachedLogoString: string = localStorage.getItem('logo');
if (cachedLogoString) { // if cached, return the cached logo
const cachedLogo: Picture = JSON.parse(cachedLogoString);
return Observable.of(cachedLogo);
}
// if not cached, do the request and cache it
const logoObservable: Observable<Picture> = this.http.get<Picture>(BASE_URL + 'logo', this.authService.setHeaders('application/json'))
.pipe(
share(),
catchError(this.handleService.error.bind(this))
);
this.cacheLogo(logoObservable);
return logoObservable;
}
private cacheLogo(logoObservable: Observable<Picture>): void {
logoObservable.subscribe(logoToBeCached => {
localStorage.setItem('logo', JSON.stringify(logoToBeCached));
});
}
Это работает нормально, проблема у меня в том, что я не уверен, что я должен делать, когда обновляю логотип:
updatePicture(picture: Picture): Observable<Picture> {
return this.http.put<Picture>(BASE_URL + picture.id, picture, this.authService.setHeaders('application/json'))
.pipe(
tap(() => this.handleService.success('Bild bearbeitet')),
catchError(this.handleService.error.bind(this))
);
}
Мне бы пришлось удалить логотип из localStorage после его обновления, чтобы получитьновый логотип во время следующего запроса GET вместо получения старого от localStorage. Я мог бы сделать это с localStorage.remove('logo')
. Но проблема в том, что это приведет к удалению только логотипа из локального хранилища того человека, который делает это обновление. Любой другой человек все еще имеет старый логотип в localStorage и не знает, что он был обновлен.
Могу ли я здесь что-нибудь сделать? Я не могу придумать, каким образом можно глобально удалить логотип из каждого локального хранилища.