Angular 通过中间服务获取承诺数据
我在通过中间服务获取承诺数据时遇到问题 有一个组件、中间服务和http服务 我的组件调用中间服务,然后通过中间服务调用http服务 Http服务返回承诺数据,我认为我无法在中间服务中处理它,因此我的组件没有返回任何内容 当我直接从组件调用Http服务时,它工作得很好,我看到数据出现在UI上 任何帮助都将不胜感激 部件代码。 下面是从中间服务调用方法的方法Angular 通过中间服务获取承诺数据,angular,Angular,我在通过中间服务获取承诺数据时遇到问题 有一个组件、中间服务和http服务 我的组件调用中间服务,然后通过中间服务调用http服务 Http服务返回承诺数据,我认为我无法在中间服务中处理它,因此我的组件没有返回任何内容 当我直接从组件调用Http服务时,它工作得很好,我看到数据出现在UI上 任何帮助都将不胜感激 部件代码。 下面是从中间服务调用方法的方法 public getDriversAndCars(){ let promise = new Promise((resolve, rej
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));
}
public getVehicle():承诺{
this.associationservice.getVehicle(25,this.currentPageIndex,this.searchText)
.那么(
res=>{
this.apimodel=res
console.log(“数据”+此.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);
getVehicle(页码:number,页索引:number,搜索关键字:string):承诺{
如果(pageIndex!==0&&searchKeyword.trim()!==''&&pageNumber!==0){
//tslint:禁用下一行:最大行长度
返回这个.http.get(api.toPromise())
。然后(响应=>{
返回响应
})
.catch(err=>err);
看来您的中间服务可能是问题所在。您正在返回此.convertToVehicleModels(此.apimodel)的已解决承诺
而此.apimodel
仍未定义。当您的associationservice仍在检索和返回您的实际数据时,您的客户端将立即返回此函数的结果
我建议你修改你的中间服务,像这样
public getVehicle(): Promise<Vehicle[]> {
return this.associationservice.getVehicle(25, this.currentPageIndex, this.searchText)
.then(res => this.convertToVehicleModels(res))
}
public getVehicle():承诺{
返回此.associationservice.getVehicle(25,this.currentPageIndex,this.searchText)
.then(res=>this.convertToVehicleModels(res))
}
这样,直到从服务中检索到您的实际数据,并且从getVehicle
返回的值是该承诺链的结果,才会调用convertToVehicleModels
方法