我有一个angularfire函数,可以在Firestore中查询有很多可能集合的集合。
我遍历包含搜索查询端点的列表,然后调用查询firebase并返回集合的搜索函数。我觉得这不适合使用RXJS。
目前,循环在每个循环上订阅一个新的firebase观察者。我觉得这不是最佳做法,可以更好地完成。
有没有办法创建一个订阅但仍然传递所有下载的数据?
for (let item of list) {
searchMap('enpoint')
.subscribe((data) => {
this.skillResults = this.skillResults.concat(data);
})
}
}
searchMap(endpoint) {
return return this.angularfire.collection('bucket/' + endpoint).valueChanges()
}
答案 0 :(得分:1)
您可以使用forkJoin
或zip
:
const observables = list.map(item => searchMap('enpoint'));
Observable.forkJoin(observables).subscribe(...)
但是,forkJoin
运算符需要完成所有源Observable,这可能与valueChanges()
不同,因此您可以使用take(1)
链接每个Observable。
const observables = list.map(item => searchMap('enpoint').take(1));
如果您希望源Observables发出相同数量的项目,您可以使用zip
:
Observable.zip(...observables).take(1).subscribe(...)
也许还要查看combineLatest
运算符,但这实际上取决于您想要做什么。