代码之家  ›  专栏  ›  技术社区  ›  DevMike

在角度服务中,如果在可观测范围内使用贴图功能,那么假设贴图功能保证同步是否正确?

  •  0
  • DevMike  · 技术社区  · 6 年前

    在Angular应用程序中,我有一个订阅服务中可观察到的组件。

    this.listService.listApi(params)
              .subscribe(
                response => this.listServiceResponse(response),
                error => this.serviceError = <any>error);
    

    在服务中,observable发出http请求。我需要循环响应,并基于一些计算构建一个结果数组,这些计算将最终返回到组件。

    为了清楚起见,我在这里简化了生成的数组,因为我的数组要复杂得多,但这里的重点是我使用map函数实现了这一点。以下是服务中方法的相关部分:

    listApi(params:any) Observable<any[]> {
        ...
        return this.http.get(params.url, ampOptions)
                            .map(data => this.listExtract(response, params))
                            .catch(this.handleError);
    }
    listExtract(response:any, params:any) {
    
      let successArray:any = [];
      let failedArray:any = [];
    
      let filteredArray:any = [];
    
      let itemFound:boolean = false;
    
      response.map((item, index) => {
        if(item.rank > params.rank) {
          filteredArray.push(item);
          if(item.id === params.id) {
            itemFound = true;
          }
        }
      });
    
      // are the following lines guaranteed to wait for the map function to finish?
    
      if(itemFound === true) {
    
        // do some additional calculations and construct the successArray
        // then push the filteredArray onto my successArray;
    
        successArray.push(filteredArray);
    
        return successArray;
    
      } else {
    
        // do some additional calculations and construct the failedArray
        // then push the filteredArray onto my failedArray;
    
        failedArray.push({flag:'failed',id:params.id});
        failedArray.push(filteredArray);
    
        return failedArray;
      }
    
    }
    

    出现 正确工作,但是否可以安全地假设 map 函数是同步的,后续的行保证只执行 之后 映射功能完成了吗?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Alexander Leonov    6 年前

    如果 response 保证是一个数组-为了不破坏您的代码-那么是的, its map() function is synchronous