使用动态网址的API调用 - Observable undefined

时间:2018-05-22 08:09:45

标签: angular api angular6

我有一个应用程序,我首先动态加载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>{...} 

在我的控制器中,我这样做(在启动时使用相同的功能或稍后调用manuall)。:

this.flightSubscription = this.f.queryFlights(body).subscribe((res) => {...});

启动时出现此错误:

  

无法读取未定义的属性'subscribe'

如果我通过点击按钮调用该功能,则URL已经预先加载。因此它使用if而不是else路径,一切正常。

有人可以在else路径中解释我的错误吗?

1 个答案:

答案 0 :(得分:1)

您错过了一条退货声明:

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

}