【发布时间】:2021-03-10 10:38:07
【问题描述】:
我需要获取 3 个 API 数据,然后我需要将 Subsidary 与 company 合并,然后合并到 main 以构建最终对象。
我在我的服务文件中写了下面的http请求。
getStaticContent$(): Observable<{
mainStaticContent$: ObjectList;
companyStaticContent$: ObjectList;
subsidaryStaticContent$: ObjectList;
}> {
const mainStaticContent$: Observable<ObjectList> = this.http.get<ObjectList>(
this.apiService.mainURL
);
const companyStaticContent$ = this.http.get<ObjectList>(
this.apiService.companyURL
);
const subsidaryStaticContent$ = this.http.get<ObjectList>(
this.apiService.subsiderayURL
);
return forkJoin({
mainStaticContent$,
companyStaticContent$,
subsidaryStaticContent$,
});
}
我无法在 Angular 解析器服务中获取这些数据,我需要在其中执行一些逻辑,然后返回最终的 ObjectList。请参阅我的以下代码并提出建议。我是 rxJS 新手,无法解决此问题
export class DataResolverService implements Resolve<ObjectList> {
constructor(private dataService: DataService) {}
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot
):
| ObjectList
| import('rxjs').Observable<ObjectList>
| Promise<ObjectList> {
return this.dataService.getStaticContent$().pipe(
tap(
([
mainStaticContent: any,
companyStaticContent,
subsidaryStaticContent,
]) => {
// perform merge opration
// then return ObjectList
return objectList;
}
)
);
}
}
【问题讨论】:
-
您能否更具体一点 - 什么不是检索?你有任何错误吗?我没有看到任何订阅
getStaticContent$()。 -
@NicholasK 错误是
must have a '[Symbol.iterator]()' method that returns an iterator -
tap运算符是一个运算符,它不会改变任何值,它只会对值做一些事情。请改用map运算符。 -
@MoxxiManagarm 是的,它使用以下解决方案与地图一起使用
标签: angular rxjs pipe fork-join