我有一个带有ID的FirebaseListObservable,我想使用FirebaseObjectObservable查找它们并创建一个结果数组,但我真的不明白该怎么做。
this.af.database.list('/favourites/'+ this.userId)
.flatMap(favouriteId => {
return this.af.database.object('/dhs/en/'+favouriteId.$value)
})
.subscribe(favourite => {
console.log("favourite", favourite);
});
这不起作用,因为favouriteId。$ value未定义。这样做的正确方法是什么?
这是一个相关的问题:How to merge an observable that is a property of another observable
编辑:我创建了一个丑陋的临时解决方案
getAllFavourites(): Observable<any> {
return Observable.create(observer => {
var resArray = [];
this.af.database.list('/favourites/'+ this.userId)
.subscribe(favouriteArray => {
favouriteArray.forEach((favouriteId) => {
this.secretProvider.getDay(favouriteId.$value)`
.subscribe(favourite => {
resArray.push(favourite);
observer.next(resArray);
});
})
})
})
}
显然,这不是可观察对象的目的,此外,例如从favourite ID
中删除了this.af.database.list('/favourites/'+ this.userId)
时,生成的可观察数组未正确更新。
更新:我找到了一个更好的解决方案:How to move FirebaseObjectObservable into a FirebaseListObservable
getAllFavourites(): Observable<any> {
return this.af.database.list('/favourites/'+ this.userId)
.map((favourites)=>{
return favourites.map((favourite) => {
favourite = this.secretProvider.getDay(favourite.$value)
return favourite;
})
});
}
(在HTML中使用嵌套的异步varibale,如其他线程中所述)
我仍然认为必须有更好的解决方案。使用mergeMap或类似的东西,并避免嵌套的asyncs。