我正在使用动态查询参数执行多个Firestore查询,以尝试将它们全部合并并获得有效的逻辑OR输出。
因此,在for循环中,我将所有数据库查询输出收集到一个数组中,然后使用spread运算符将它们合并在一起。
所有内容似乎都按预期工作 - 如果我订阅单个合并的observable和日志输出,我将从不同的单个查询获得输出!
当我将单个合并的observable传递给async并尝试使用ngFor迭代各个项时,HTML中出现了问题。它就好像observable是空的。
* TS:
private getMergedEvents(queryParameters: string[]){
let observables: Observable<any[]>[] = [];
let temp_observable: Observable<any[]>;
//Loop through the list of bills and build dynamic queries
queryParameters.forEach((bill, index) =>{
temp_observable =
this.db.collection(
'daily_file/',
ref => ref.where('bill_ids.' + bill, '==', true)
).valueChanges()
//Use a temporary array and merge afterwards for clarity.
observables[index] = temp_observable;
})
//Merge all of the observables to combine into one
this.eventObservables = Observable.merge(...observables)
this.eventObservables.subscribe(events =>{
for(let event of events) {
console.log(event.date)
}
})
}
* HTML:
<ion-list>
<ion-item *ngFor="let event of eventObservables | async">
<h1>static text</h1>
<h1>{{event.date}}</h1>
</ion-item>
</ion-list>
</ion-content>
如上所述,屏幕上不显示任何内容(甚至不是静态文本),表明观察者是空的。
非常感谢任何帮助。谢谢。
答案 0 :(得分:0)
您正在为同一个observable订阅两次,并且默认情况下observable不是多播。您可以使用Subject来实现该结果,或者创建一个可观察的多播,如下所述:http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-multicast