angular - RXJS 操作符在 firebase 上无法使用
我正在使用 RXJS 操作符与 Firebase 可观察对象(distinct 和 filter)。这是我的 Firebase 树。我的代码如下:
let places this.db.list(`users/${this.authProvider.getUID()}/visitedPlaces`,{
query:{
orderByChild:"googleId"
}
});
places.distinct((p)=>{
console.log(p)
return p.googleId;
}).
subscribe((snap)=>{
console.log(JSON.stringify(snap,null,2))
},(err)=>{
console.log(JSON.stringify(err,null,2))
},()=>{
console.log("completed");
});
我正在尝试根据 googleId 区分 Firebase 数据。我没有收到任何错误,但去重列表不起作用。
有什么帮助或原因吗?谢谢。
答案#1
听起来你是在数组上使用distinct操作符,而不是对象流。因此在你的distinct操作符中,p是一个数组,而不是你期望的数组中的对象。你可以在一个map中使用普通的JS来实现,如下所示:
Rx.Observable.of([
{ id: 1},
{ id: 2},
{ id: 1},
{ id: 3},
{ id: 2}
]).map(x => x.reduce((a, c) => {
if (!a.some(y => y.id === c.id)) {
a.push(c);
}
return a;
}, [])
).subscribe(x => { console.log(x); });<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.5.6/Rx.js"></script>或者你可以使用 flatMap 来扩展数组,如下所示:
Rx.Observable.of([
{ id: 1},
{ id: 2},
{ id: 1},
{ id: 3},
{ id: 2}
])
.flatMap(x => x)
.distinct(x => x.id)
.subscribe(x => { console.log(x); });<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.5.6/Rx.js"></script>