如何解决将多个 Firestore 数据库集合调用结果组合到一个数组中
在成功获取我用于后续 db 调用的子集合的所有引用后,我尝试将结果合并到单个 Observable 数组中。
现在,每次解析课程引用和使用 loadAllLessons()
进行数据库查询时,snapshotChanges()
函数的订阅内的值都会更新为单个数组。
Firestore 数据库中的目标子集合(课程)嵌套在集合(课程)中。我的代码看起来很像这样:
getAllLessonsRef(): Observable<string[]> {
return this.db.collection('/courses')
.snapshotChanges()
.pipe(map(snap => snap.map(s => {
const courseId = s.payload.doc.id;
const lessonRef = `/courses/${courseId}/lessons`;
return lessonRef
})));
}
loadAllLessons(): Observable<any> {
return this.getAllLessonsRef()
.pipe(switchMap(lessonRefs => {
let items =
lessonRefs.map(ref => {
console.log(ref)
return this.db.collection(`${ref}`).snapshotChanges()
});
return merge(...items)
}),map(list => {
return convertSnaps<Lesson>(list)
}))
}
合并所有后续结果的最佳方法是什么?
解决方法
我可能会为此使用 forkJoin
。详细了解 forkJoin here。
import { forkJoin } from 'rxjs';
....
loadAllLessons(): Observable<any> {
return this.getAllLessonsRef()
.pipe(switchMap(lessonRefs => {
return forkJoin(...lessonRefs.map(ref => this.db.collection(`${ref)`).snapshotChanges()));
}),map(list => {
return convertSnaps<Lesson>(list)
}))
}
,
我使用旧代码找到的解决方案是在订阅方法中加入结果
this.lessonService.loadAllLessons()
.subscribe(
lessons => {
lessons.map(lesson => {
this.allLessons.push(lesson)
})
}
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。