【发布时间】:2019-08-10 16:08:11
【问题描述】:
我实现了一个服务,它应该获取一次数据并缓存结果。该服务处于根级别。每次我在组件的构造函数中注入此服务并订阅该服务的方法时都会发出一个新的 http 请求。
我已经尝试将请求代码从构造函数中放到方法中。
@Injectable({
providedIn: 'root'
})
export class SessionService {
private api = Configuration.api + 'session/';
private readonly session$: Observable<Session>;
constructor(private http: HttpClient) {
this.session$ = this.http
.get<any>(`${this.api}current`, {withCredentials: true})
.pipe(
timeout(Configuration.timeout),
retry(Configuration.retry),
map(data => {
return data.session as Session;
}
),
catchError(ErrorService.handleError)
);
}
getCurrentSession(): Observable<Session> {
return this.session$;
}
}
export class Component implements OnInit, AfterContentInit {
session = Session.empty();
constructor(
private _s: SessionService) {
this._s.getCurrentSession().subscribe(session => this.session = session);
}
}
目的是执行一次请求并将结果缓存在变量中。
【问题讨论】: