我在通过中间服务获取承诺数据时遇到问题。
有一个组件,中间服务和http服务。
我的组件调用中间服务,然后通过中间服务转到http服务。
Http服务返回承诺数据,我认为我无法在中间服务中对其进行处理,因此没有任何内容返回给我的组件。
当我直接从组件调用Http服务时,它运行良好,我看到了数据出现在UI中。
任何帮助将不胜感激。
组件代码。 这是从中间服务调用方法的方法
public getDriversAndCars(){
let promise = new Promise((resolve, reject) => {
this.vehicleService.getVehicle()
.then(
res => {
console.log("length"+this.listOfVehicles.length)
this.getDriver();
resolve();
},
msg => { // Error
reject(msg);
}
);
});
return promise;
}
中间服务代码
public getVehicle(): Promise<Vehicle[]> {
this.associationservice.getVehicle(25, this.currentPageIndex, this.searchText)
.then(
res => {
this.apimodel = res
console.log("data" + this.listOfVehicles[0].assignedTo)
},
)
return Promise.resolve(this.convertToVehicleModels(this.apimodel));
}
Http服务中的代码
getVehicle(pageNumber: number,pageIndex: number, searchKeyword: string): Promise<VehicleResourceApiModel> {
if (pageIndex !== 0 && searchKeyword.trim() !== '' && pageNumber !== 0) {
// tslint:disable-next-line:max-line-length
return this.http.get<VehicleResourceApiModel>(api).toPromise()
.then(response => {
return response
})
.catch(err => err);
答案 0 :(得分:1)
看来您的中间服务可能是问题所在。您将返回this.convertToVehicleModels(this.apimodel)
的未解决的this.apimodel
承诺。当您的关联服务仍在检索并返回您的实际数据时,您的客户端会立即获取此功能的结果。
我建议您像这样修改中间服务...
public getVehicle(): Promise<Vehicle[]> {
return this.associationservice.getVehicle(25, this.currentPageIndex, this.searchText)
.then(res => this.convertToVehicleModels(res))
}
这样,直到从服务中检索到实际数据,并且convertToVehicleModels
的返回值是该承诺链的结果,才调用getVehicle
方法。