Angularfire rxjs 多个订阅
Angularfire rxjs multiple subscriptions
我有一个 angularfire 函数,它在 Firestore 中查询有很多可能集合的集合。
我循环遍历包含搜索查询端点的列表,然后调用查询 firebase 和 returns 集合的搜索函数。我觉得这不是对 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()
}
您可以为此使用 forkJoin
或 zip
:
const observables = list.map(item => searchMap('enpoint'));
Observable.forkJoin(observables).subscribe(...)
然而,forkJoin
运算符要求所有源 Observable 完成,这可能与 valueChanges()
不同,因此您可以将每个 Observable 链接到 take(1)
。
const observables = list.map(item => searchMap('enpoint').take(1));
或者如果您希望源 Observable 发出相同数量的项目,您可以使用 zip
:
Observable.zip(...observables).take(1).subscribe(...)
也许还可以查看 combineLatest
运算符,但这实际上取决于您想要做什么。
我有一个 angularfire 函数,它在 Firestore 中查询有很多可能集合的集合。
我循环遍历包含搜索查询端点的列表,然后调用查询 firebase 和 returns 集合的搜索函数。我觉得这不是对 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()
}
您可以为此使用 forkJoin
或 zip
:
const observables = list.map(item => searchMap('enpoint'));
Observable.forkJoin(observables).subscribe(...)
然而,forkJoin
运算符要求所有源 Observable 完成,这可能与 valueChanges()
不同,因此您可以将每个 Observable 链接到 take(1)
。
const observables = list.map(item => searchMap('enpoint').take(1));
或者如果您希望源 Observable 发出相同数量的项目,您可以使用 zip
:
Observable.zip(...observables).take(1).subscribe(...)
也许还可以查看 combineLatest
运算符,但这实际上取决于您想要做什么。