Возврат наблюдаемого из функции - PullRequest
0 голосов
/ 31 января 2019

У меня есть следующая функция в машинописи:

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 (результат), но я не смог найти способ сделать это.

Функция getRoute из dataService:

getRoute(service: string){
    return this.http.get('urlToMyBackendWebApi');
}

Где http - Angular HttpClient.

Как я могу получить значение, возвращаемое из getConfigurations ()?

Я пытался подписаться на getConfigurations.У меня нет проблем с условием if (возвращается строка sessionConfig), но как получить результат из условия else?Должен ли я вернуть наблюдаемую часть целиком?В таком случае, как я мог прочитать ответ?

1 Ответ

0 голосов
/ 31 января 2019

Не подписывайтесь на наблюдаемое, возвращайте его и используйте оператор 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))
        );
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...