我有一个服务调用,它调用API来返回JSON。然后,我有一个带有订阅的函数,它调用服务调用。JSOON很好地返回,服务调用和订阅所有工作。但是,在构建管道中构建我的应用程序时,我会得到以下错误"Uncaught (以承诺的方式) TypeError:无法将未定义或空值转换为对象“。和我的构建失败(即使它在本地运行良好并通过了所有测试)。我使用的是角9和打字记录。
我的订阅和它的功能看起来是这样的:
houseData: HouseValueObject;
houseNumber = '12345';
callHouseService() {
this.streetHouseService.getHouseData(this.houseNumber).subscribe(
async (data) => {
this.houseData = await data;
const keys = Object.keys(this.houseData.extensiveHouseData);
this.extensiveHouseDataList = keys.map(k => this.houseData.extensiveHouseData[k]);
}
)
}
getHouseData方法看起来是这样的:
export class HouseService {
private readonly relativeURL = 'services/api/houseinfo/'
constructor(private http: HttpClient) {
getHouseData(houseNumber: string): Observable<HouseValueObject> {
return.this.http.get<HouseValueObject>(this.relativeURL + houseNumber + '/');
}
}
}
HouseValueObject的值对象看起来是这样的:
export class HouseValueObject {
numberBathrooms: number;
extensiveHouseData: HouseValue[];
}
我认为添加异步和等待将暂停执行,直到实现返回的承诺,以便将JSON数据传递到const =Object.keys.代码行,但情况似乎并非如此。我的问题是,在实现返回的承诺以确保JSON数据存在和const键=Object.keys.代码行在本地工作之前,我如何正确地执行挂起执行?
发布于 2021-11-02 15:13:40
我个人会重写服务以回报承诺,应该更容易阅读。
HouseService
getHouseData(houseNumber: string): Promise<HouseValueObject> {
return this.http
.get<HouseValueObject>(`${this.relativeURL}${houseNumber}/`)
.toPromise<HouseValueObject>();
}
Component
async callHouseService(): Promise<void> {
this.houseData = await his.streetHouseService.getHouseData(this.houseNumber);
this.extensiveHouseDataList = Object
.keys(this.houseData.extensiveHouseData)
.map(k => this.houseData.extensiveHouseData[k]);
}
https://stackoverflow.com/questions/69811260
复制相似问题