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