Angular 通过中间服务获取承诺数据

Angular 通过中间服务获取承诺数据,angular,Angular,我在通过中间服务获取承诺数据时遇到问题 有一个组件、中间服务和http服务 我的组件调用中间服务,然后通过中间服务调用http服务 Http服务返回承诺数据,我认为我无法在中间服务中处理它,因此我的组件没有返回任何内容 当我直接从组件调用Http服务时,它工作得很好,我看到数据出现在UI上 任何帮助都将不胜感激 部件代码。 下面是从中间服务调用方法的方法 public getDriversAndCars(){ let promise = new Promise((resolve, rej

我在通过中间服务获取承诺数据时遇到问题

有一个组件、中间服务和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));

  }
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
方法