我试图找到一种使这种情况起作用的方法:
talks$
,其中列出了所有对话。personId
TalkWithPerson
const test = this.talks$.pipe(
exhaustMap(talks =>
talks.map(t => this.getPersonById(t.personId).pipe(map(p => newTalkWithPerson(t, p))))
),
);
当前,它发出2个可观察到的信号,每个发出我的TalkWithPerson
对象。 (Observable<Observable<TalkWithPerson>>
)
如果可能的话,我希望有一个Observable<TalkWithPerson[]>
。
我当时想让所有人和所有话题都走上艰难的道路,并使用带有项目功能的combineLatest
来匹配记录,但是我不想载入所有人,这会导致加载大量列表...
谢谢您的帮助!
StackBlitz:https://stackblitz.com/edit/talks-person
答案 0 :(得分:2)
尝试一下:
const test = this.talks$.pipe(
exhaustMap(talks =>
from(talks)
.pipe(
mergeMap(t => this.getPersonById(t.personId).pipe(map(p => newTalkWithPerson(t, p)))),
toArray())
)
),
);
from
导入为创建方法import { from } from "rxjs";
toArray
与'map'可管道运算符答案 1 :(得分:0)
为此使用flatMap
运算符。 flatMap
会将Observable<Observable<TalkWithPerson[]>>
解包到Observable<TalkWithPerson[]>
所以尝试这样做:
const test = this.talks$.pipe(
exhaustMap(talks =>
talks.flatMap(t => this.getPersonById(t.personId).pipe(map(p => newTalkWithPerson(t, p))))
),
);