gpt4 book ai didi

angular - 如何嵌套包裹在 APP_INITIALIZER 中的 httpclient 调用

转载 作者:搜寻专家 更新时间:2023-10-30 21:57:03 24 4
gpt4 key购买 nike

我已经实现了一个由 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 解决方案。

最佳答案

事实证明,您不能将 Observable 嵌套在由 APP_INITIALIZER 初始化的 Promise 中。嵌套调用也需要是一个 Promise。查看现在正确分配 this.stuff 的修改方法:

getConfigValues(): Promise<void> {
return this.getAppSettings()
.toPromise()
.then(data => {
this.exampleUrl = data;
}).then(() => {
return this.getOtherStuff()
.toPromise()
.then(data => {
this.stuff = data;
});
}
);
}

关于angular - 如何嵌套包裹在 APP_INITIALIZER 中的 httpclient 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53320136/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com