У меня есть приложение, в котором я сначала динамически загружаю URL-адреса API, а затем выполняю запросы к ним.
Если приложение какое-то время работает, это очень просто, но при запуске мои API-вызовы должныждать получения URL.
Это мой код в сервисе, который выполняет API-вызовы.Это зависит от другой службы, называемой sls, которая будет извлекать динамические URL-адреса API.
queryFlights(body: FlightBoardApiCallBody): Observable<any>{
if (this.getFlightsURL){
return this.queryFlightsHelper(body, this.getFlightsURL);
} else {
this.sls.getServices()
.map(s => s[GET_FLIGTHS_SERVICE_NAME])
.switchMap(url => {
if (url != null){
return this.queryFlightsHelper(body, url);
} else {
return Observable.empty();
}
});
}
}
Фактический вызов API происходит здесь.Это работает при вызове из строки 3.
private queryFlightsHelper(b: FlightBoardApiCallBody, url: string): Observable<any>{...}
В моем контроллере я делаю это (та же функция при запуске или вручную вызывает позже).:
this.flightSubscription = this.f.queryFlights(body).subscribe((res) => {...});
При запуске я получаю эту ошибку:
Невозможно прочитать свойство 'подписка' из неопределенного
Если я вызываю функцию нажатием одной кнопки, URL-адреса уже предварительно загружены.Поэтому он использует if вместо пути else, и все работает нормально.
Может кто-нибудь объяснить, что я делаю неправильно в else-пути?