【发布时间】:2019-07-31 05:10:03
【问题描述】:
我有一个从服务器获取数据的通用服务。收到响应后,我使用映射器函数将纯 JSON 数据映射到所需模型。对于映射器函数中的某些类类型,我需要从服务器获取一些额外的数据。如何强制映射器函数等待第二个请求?
这是我的get函数:
getChildren(params: ITreeQueryParams): Observable<Optional<T[]>> {
params.id = isPresent(params.id) ? params.id : 0;
params.parentId = isPresent(params.parentId) ? params.parentId : 0;
params.isRoot = isPresent(params.isRoot) ? params.isRoot : false;
params.additionalId = isPresent(params.additionalId) ?
params.additionalId : 0;
return this.http.get<IListResponse<T>>
(`${this.resourceUrl}/getChildren/${params.id}/${params.parentId}/${params.isRoot}/${params.additionalId}`,
{
observe: 'response'
}).pipe(map((resp) => this.mapResponse(resp,this.model)));
}
这是我的映射器函数:
protected mapResponse(resp: any, model: IAsset): void {
if (resp) {
this.anotherTreeService.getNodeDetail(resp.id, resp.isRoot).subscribe(res => {
model.additionalData = {canEdit: res.length > 0 ? true : false};
});
if (resp.name) {
model.title = resp.name;
}
}
}
【问题讨论】:
-
使用mergeMap
-
RXJS 中的 Observable.combineLatest 或 Observable.forkJoin 更好
标签: angular httprequest angular7 fork-join