API-вызов с динамическим URL-адресом - Наблюдаемый неопределенный - PullRequest
0 голосов
/ 22 мая 2018

У меня есть приложение, в котором я сначала динамически загружаю 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-пути?

1 Ответ

0 голосов
/ 22 мая 2018

Вам не хватает инструкции возврата:

 queryFlights(body: FlightBoardApiCallBody): Observable<any>{
if (this.getFlightsURL){
  return this.queryFlightsHelper(body, this.getFlightsURL);
} else {
  return this.sls.getServices()  // HERE
    .map(s => s[GET_FLIGTHS_SERVICE_NAME])
    .switchMap(url => {
      if (url != null){
        return this.queryFlightsHelper(body, url);
      } else {
        return Observable.empty();
      }
    });
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...