Angular 使用可观测矩阵映射阵列的可观测性

Angular 使用可观测矩阵映射阵列的可观测性,angular,rxjs,Angular,Rxjs,我试图找到一种方法使此场景正常工作: 我有一个可观察的talks$,它会发出所有会谈的列表 谈话有一个属性personId 此属性可以使用可观察属性映射到人员 我尝试将其映射到一个类TalkWithPerson const test=this.talks$.pipe( 排气图(谈话=> talks.map(t=>this.getPersonById(t.personId).pipe(map(p=>newTalkWithPerson(t,p))) ), );为此使用flatMap运算符fla

我试图找到一种方法使此场景正常工作:

  • 我有一个可观察的
    talks$
    ,它会发出所有会谈的列表
  • 谈话有一个属性
    personId
  • 此属性可以使用可观察属性映射到人员
  • 我尝试将其映射到一个类
    TalkWithPerson
const test=this.talks$.pipe(
排气图(谈话=>
talks.map(t=>this.getPersonById(t.personId).pipe(map(p=>newTalkWithPerson(t,p)))
),

);为此使用
flatMap
运算符
flatMap
将一个
Observable
展开为
Observable

所以试着这样做:

const test = this.talks$.pipe(
  exhaustMap(talks =>
    talks.flatMap(t => this.getPersonById(t.personId).pipe(map(p => newTalkWithPerson(t, p))))
  ),
);
试试这个:

const test = this.talks$.pipe(
    exhaustMap(talks =>
        from(talks)
            .pipe(
                mergeMap(t => this.getPersonById(t.personId).pipe(map(p => newTalkWithPerson(t, p)))),                  
                toArray())
            )
  ),
);
  • 导入
    from
    作为从“rxjs”导入{from}的创建方法
  • 导入
    toArray
    与“映射”可管道运算符相同

排气图(talks=>:此处talks不是可观测的,因此没有平面图,rxjs的点符号无效。如果可能,您可以创建stackbliz吗?为了排列,会导致可观测的不发射,当然是因为源未完成。此处的toArray位于从“talks”创建的内部可观测上。根据名称“getPersonById”,我假设它是obs可以在一个值之后完成。如果没有,请单击Lmk,我将编辑我的答案。我将getPersonById方法更改为在一个值之后完成,并且它正在工作,谢谢!但是您能告诉我getPersonById是否不会返回一次吗?仅供学习:)如果没有立即完成,您应该决定何时收集所有发出的项并将它们转换为数组。这确实取决于您的情况,但这里有一些选项:仅从“getPersonById”中获取第一项-您可以使用Take(1)在“映射”之前的管道中。缓冲项并在经过一段时间后发出它们-检查缓冲运算符