我有一个函数,该函数接收DTO对象并将其转换为发出单个已转换Entity的可观察对象。它具有以下标头:
dtoTransformer(dto: DTO): Observable<Entity>
我还有一个返回Observable的函数,该函数发出DTO列表:
getDTOs(): Observable<DTO[]>
使用这两个,我需要编写一个函数,该函数返回从接收到的DTO转换而来的Entity
列表的可观察值:
getEntyties():Observable<Entity[]>
我的问题是将dtoTransformer
应用于可观察对象内DTO列表的值。有可以帮助我的接线员吗?我不知道该怎么办。
答案 0 :(得分:0)
您可以结合使用forkJoin
和concatMap
。假设这些是简单的httpClient
(正在完成)调用:
getEntities(): Observable<Entity[]> {
return this.getDtos().pipe(
concatMap((dtos) => forkJoin(
dtos.map((dto) => this.dtoTransformer(dto))
)
)
}
这里发生了什么
DTO[]
map
forkJoin
,它将进行并行调用并在所有条件都完成(且没有错误)时返回很显然,您需要考虑一些事情,当一个http调用错误时,它不会返回任何内容,因此您需要添加一些后备。如果DTO[]
数组很大,您可以达到请求限制,那么也许可以进行一些限制,或者通过并行生成固定数量进行分块,并在完成这些操作后继续下一个批次>