繁体   English   中英

使用外部数组展平嵌套的 Observables 而无需内部订阅 (RxJS)

[英]Flatten nested Observables with outer array without inner subscribe (RxJS)

给定以下 TypeScript 函数,它们执行异步 HTTP 调用:

public retrieveAllMembersIdsFromGroup(groupId: string): Observable<string[]>
public retrieveMember(memberId: string): Observable<Member>

如何将其组合在一个 function 中以获得所有成员(可观察)?

public retieveAllMembersFromGroup(groupId: string): Observable<Member[]>

例如,我想要这样的东西:

public retieveAllMembersFromGroup(groupId: string): Observable<Member[]> {
return this.retrieveAllMembersIdsFromGroup(groupId).pipe(
      map((membersIds: string[]) => {
        //some magic here to call this.retrieveMember(memberId)
        return //Observable<Member[]>;
      })
    );
}

如果可能的话,我不想订阅retrieveAllMembersIdsFromGroup,这样就不必手动处理ID。 什么是最好的解决方案?

我不完全理解你在寻找什么魔法,但也许这对你有用?

public retrieveAllMembersFromGroup(groupId: string): Observable<Member[]> {
    return this.retrieveAllMemberIdsFromGroup(groupId).pipe(
      concatMap((memberId: string) => {
        return this.retrieveMember(memberId);
      })
    );
}

请注意,我还更改了一些名称,因为它们拼写错误或语法奇怪。

以下解决方案对我有用:

public retrieveAllMembersFromGroup(groupId: string): Observable<Member[]> {
    return from(this.retrieveAllMemberIdsFromGroup(groupId)).pipe(
      mergeMap((membersIds: string[]) => {
        const members$: Observable<Member>[] = [];
        membersIds.forEach((memberId: string) => {
          members$.push(this.retrieveMember(memberId));
        });
        return combineLatest(members$);
      })
    );
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM