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)在“映射”之前的管道中。缓冲项并在经过一段时间后发出它们-检查缓冲运算符