我正在使用 Angularfire,并且我得到了一个连续的数组流,其中包含任务 ID。我需要获取数组中每个 id 的任务文档作为新的可观察值。然后将一组任务文档返回到流中,以便我能够在组件中订阅它并显示任务列表。
到目前为止,我已经可以将它与 mergeMap 一起使用了。我拆分数组并获取任务文档并将它们返回到流中。我的解决方案的唯一问题是,当我订阅 Observable 时,我没有得到一系列任务,而是每个任务都是一个单独的更改,我无法使用 ngFor 循环。在这种情况下使用 toArray() 运算符不起作用,因为它是一个永无止境的连续流。
这是我到目前为止的代码:
this.db.collection(`games/${gameId}/missions`).valueChanges().pipe(
mergeMap(missions => missions),
mergeMap((mission: any) => {
return this.db.doc(`missions/${mission.id}`).snapshotChanges();
}),
);
这会在单个事件中生成以下输出:
{ id: 1, missionProperties }
{ id: 2, missionProperties }
{ id: 3, missionProperties }
但我希望将其作为一系列任务出现在一个事件中:
[
{ id: 1, missionProperties },
{ id: 2, missionProperties },
{ id: 3, missionProperties }
]
最佳答案
使用扫描运算符聚合
this.db.collection(`games/${gameId}/missions`).valueChanges().pipe(
switchMap(missions =>
from(missions).pipe(
mergeMap(mission => this.db.doc(`missions/${mission.id}`).snapshotChanges()),
scan((acc, curr) => [curr, ...acc], [])
),
)
关于angular - RxJs Observable in Observable from Array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59101004/