Показать сообщение отдельно
  #1 (permalink)  
Старый 19.03.2019, 13:12
Интересующийся
Отправить личное сообщение для kotelok Посмотреть профиль Найти все сообщения от kotelok
 
Регистрация: 27.08.2018
Сообщений: 22

Дождаться завершения HTTP-запроса, но не всегда
Подскажите, как правильно реализовать следующую логику (см код):
1. Если есть закэшированный конфиг, то пропустить его запрос с сервера и сразу перейти к выполнению последующего кода (последняя строка).
2. Если НЕТ закэшированного конфига, то запросить его с сервера, дождаться (!) результата и, если ок, то сохранить в кэш и после этого перейти к последующему коду (последняя строка). Если ошибка - завершить выполнение.

В том виде, что сейчас написано работает некорректно, т.е. 'console.info' начинает выполняться ещё до получения ответа по 'httpClient.get'.

При этом помещать 'console.info' внутерь подписки тоже нельзя, т.к. в этом случае он не выполнится, если данные изначально есть в кэше.

Дублировать вызов тоже как-то неправильно с точки зрения организации кода.

Собственно, какой синтаксис позволит запустить 'httpClient.get' синхронно, т.е. чтобы до его полного завершения не происходило выполнения последующего кода этого метода?

----
        if (this.appConfig.authServerConfig == null) {
            this.httpClient.get("{auth}/.well-known/openid-configuration").subscribe((response:string) => {
                this.appConfig.authServerConfig = response;
            },
            (httpError:HttpErrorResponse) => {
                console.error("error: get auth server config");
            });
        }

        console.info(this.appConfig.authServerConfig["token_endpoint"]);
Ответить с цитированием