通过中间服务角度5获取承诺数据

时间:2018-06-19 17:52:40

标签: angular

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

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

1 个答案:

答案 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方法。