在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
函数是同步的,后续的行保证只执行
之后
映射功能完成了吗?