javascript - 从函数返回 Observable
问题描述
我在打字稿中有以下功能:
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 条件中获取结果?我应该返回整个部分的 observable 吗?在这种情况下,我如何阅读退货?
解决方案
不要订阅 observable,返回它,并使用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))
);
}
}
推荐阅读
- angular - 打字稿中的方法返回类型为null
- sql - 为一张表处理超过 1000 万行 (postgresql)
- c - 从 pjreddie 使用 YOLOv3 时出现分段错误(核心转储)
- java - 收到警告:配置“编译”已过时,已替换为“实施”
- java - 如何在java中获取二进制数的前导零
- javascript - TypeError:无法分配给只读属性 - Karma
- php - 无法访问 api post 方法,总是请求 OPTIONS
- expression - 特定因子频率的条形图
- python - 使用 M2MQTT Paho Python 客户端连接到 Azure IoT Hub
- sendgrid - Sendgrid 入站解析 webhook 被调用两次