我在打字稿中具有以下功能:
getConfigurations() {
let sessionConfig = sessionStorage.getItem('config');
if(config)
return of(sessionConfig);
else {
this.dataService.getRoute('configurations').subscribe(
route => this.http.get<any[]>(route.ToString()).subscribe(
result => {
sessionStorage.setItem('config', result);
return of(result);
},
error => {
alert(error);
}),
error => {
alert(error);
}
);
}
}
如果sessionStorage密钥已经存在,则该函数应该返回一个字符串,或者使用dataService从后端检索值,然后在会话中设置该值。我也想返回sessionStorage中设置的值(结果),但是我找不到方法。
dataService中的getRoute函数是:
getRoute(service: string){
return this.http.get('urlToMyBackendWebApi');
}
其中http是Angular HttpClient。
如何获取getConfigurations()返回的值?
我试图订阅getConfigurations。我对if条件(返回字符串sessionConfig)没有任何问题,但是如何从else条件获取结果?我应该返回整个部分的可观察物吗?在这种情况下,我该如何阅读退货?
答案 0 :(得分:3)
不要订阅可观察对象,返回它,并使用tap
运算符来存储响应:
getConfigurations() {
let sessionConfig = sessionStorage.getItem('config');
if(config)
return of(sessionConfig);
else {
return this.dataService.getRoute('configurations').pipe(
mergeMap(route => this.http.get<any[]>(route.ToString()),
tap(result => sessionStorage.setItem('config', result))
);
}
}