API-动态调用URL-可观察未定义

API-Call with dynamic URL - Observable undefined

我有一个应用程序,我首先动态加载 API-URL,然后对其进行查询。

如果应用 运行 有一段时间这很容易,但在启动时我的 API- 调用必须等待检索 URL。

这是我在服务中进行 API 调用的代码。它依赖于另一个名为 sls 的服务,该服务将获取动态 API-URLs.

 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) => {...});

启动时我得到这个错误:

Cannot read property 'subscribe' of undefined

如果我通过单击按钮调用函数,则 URL 已经预加载。因此它使用 if 而不是 else 路径并且一切正常。

谁能解释一下我在 else 路径中做错了什么?

您缺少 return 语句:

 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();
      }
    });
}

}