Я хочу кэшировать (используя хранилище сеансов) HTTP-ответ, на который я подписан, с помощью RXJS. Если тот же запрос (URL) вызывается еще раз, я хотел бы использовать хранилище сеансов вместо того, чтобы получать его обратно с сервера.
Я сохраняю URL-адрес в качестве ключа для хранения сеанса и ответ сервера в качестве значения.
Я новичок в концепции Angular 2, RXJS и Observer, хотел знать, насколько масштабируемым является этот подход.
private setLoginData():void{
this.loginDataObserver().subscribe(
(data:any)=>{
let loginData:LoginUser={
id : data.employee.id,
name : data.employee.first_name+' '+data.employee.last_name,
jobTitle : data.employee.job_title,
company : data.profile.name,
avatar : data.employee.avatar,
role : data.role
}
}
);
}
private loginDataObserver(){
let options = new RequestOptions({headers: new Headers({'Content-Type': 'application/json'})});
let params: URLSearchParams = new URLSearchParams();
params.set('token',this.cookie.get('token'));
options.search=params;
if(sessionStorage.getItem(this.dataUrl+this.cookie.get('userId'))!=null){
let cacheJson=JSON.parse(sessionStorage.getItem(this.dataUrl+this.cookie.get('userId')));
let cacheDataProvider : BehaviorSubject<any> = new BehaviorSubject<any>(cacheJson);
let cacheObserver:Observable<any>=cacheDataProvider.asObservable();
return cacheObserver;
}
return this.http.get(this.dataUrl,options).
do((res:Response) => sessionStorage.setItem(this.dataUrl,JSON.stringify(res.json()))).
map((res:Response) => res.json()).
catch(this.handleError)
}
Я планирую улучшить это как службу Angular 2 с помощью методов включения кеша,