我有许多服务请求休息服务,我想从服务器缓存数据接收以供进一步使用。 有人能说出现金回应的最佳方式是什么?
答案 0 :(得分:2)
您可以在此处找到多个答案:Angular 2 cache observable http result data
我建议构建简单的类Cacheable<>这有助于管理从http服务器或其他任何其他来源检索的数据的缓存:
declare type GetDataHandler<T> = () => Observable<T>;
export class Cacheable<T> {
protected data: T;
protected subjectData: Subject<T>;
protected observableData: Observable<T>;
public getHandler: GetDataHandler<T>;
constructor() {
this.subjectData = new ReplaySubject(1);
this.observableData = this.subjectData.asObservable();
}
public getData(): Observable<T> {
if (!this.getHandler) {
throw new Error("getHandler is not defined");
}
if (!this.data) {
this.getHandler().map((r: T) => {
this.data = r;
return r;
}).subscribe(
result => this.subjectData.next(result),
err => this.subjectData.error(err)
);
}
return this.observableData;
}
public resetCache(): void {
this.data = null;
}
public refresh(): void {
this.resetCache();
this.getData();
}
}
<强>用法强>
声明可缓存&lt;&gt;对象(可能是服务的一部分):
list: Cacheable<string> = new Cacheable<string>();
和处理程序:
this.list.getHandler = () => {
// get data from server
return this.http.get(url)
.map((r: Response) => r.json() as string[]);
}
从组件调用:
//gets data from server
List.getData().subscribe(…)
更多详细信息和代码示例如下:http://devinstance.net/articles/20171021/rxjs-cacheable
答案 1 :(得分:0)
您也可以将http拦截器与4+版本一起使用。一个非常详细,简单的实现,并带有解释-https://www.concretepage.com/angular/angular-caching-http-interceptor