从函数返回Observable

时间:2019-01-30 22:53:45

标签: javascript angular typescript rxjs

我在打字稿中具有以下功能:

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条件获取结果?我应该返回整个部分的可观察物吗?在这种情况下,我该如何阅读退货?

1 个答案:

答案 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))
        );
    }
}