我已经实现了一个由APP_INITIALIZER触发的httpCall,它返回一个URL,然后我想将其用于另一个嵌套的httpCall:
getAppSettings(): Observable<IAppSettings> {
return (this.httpClient
.get<IAppSettings>(this.localbaseUrl)
.pipe(
catchError(this.errorHandlerSerevice.handleError)
)) as any;
}
getConfigValues(): Promise<void> {
return this.getAppSettings()
.toPromise()
.then(data => {
this.exampleUrl = data;
this.getOtherStuff().subscribe(data => this.stuff = data);
});
}
getOtherStuff(): Observable<any[]> {
return (this.httpClient
.get<any[]>(this.exampleUrl)
.pipe(
catchError(this.errorHandlerSerevice.handleError)
)) as any;
}
此实现是错误的,在刷新页面时会引发以下错误:
Uncaught (in promise): TypeError: Cannot read property 'length' of undefined
来自this.stuff []的
没有及时填充(第二个,嵌套的httpClient可观察调用)。
如何正确实现/嵌套这些httpClient调用。 请注意,我使用Angular 6和httpClient,请不要建议旧的http get解决方案。
答案 0 :(得分:0)
原来,您不能在由APP_INITIALIZER初始化的Promise中嵌套Observable。嵌套调用也必须是Promise。请参阅修改后的方法,该方法现在可以正确分配this.stuff:
GoogleAnalyticsSwift