我有一个应用程序,我首先动态加载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路径中解释我的错误吗?
答案 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();
}
});
}
}