У меня есть приложение, в котором я сначала динамически загружаю API-URL, а затем делаю к ним запросы.
Если приложение работает какое-то время, это очень просто, но при запуске мои API-вызовы должны ждать, чтобы получить URL-адреса.
Это мой код в службе, которая делает API-вызовы. Это зависит от другой службы, называемой sls, которая будет получать динамические API-URL.
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, и все работает нормально.
Может кто-нибудь объяснить, что я делаю неправильно в другом пути?