我是Rx的新手并且有问题要得到我想要的东西。请帮忙: 我想获得UserIds列表的用户配置文件ID列表 我将所有结果合并到一个Observable
时遇到问题getListOfUsers(): Observable< Profile[]> {
let users = this.af.database.list('listOfUsers/');
let singleuser = users.flatMap(
(users)=> {
console.log(users);
return users.map( singleuser => {
return singleuser;
})
}
);
return singleuser.flatMap(
(profile) => {
return this.af.database.object('profiles/' + profile['$key']).map(
singleprofile => {
console.log(singleprofile);
return singleprofile;
}
);
});
}
这个函数让我回到单个配置文件对象,如何将它们合并到一个配置文件对象列表?我尝试用Observable.forkjoin和其他一些东西包装return函数但是没有任何东西适合我。 有没有选择在第二次调用中使用整个列表而不是先将它拆分为单个用户? 请帮忙
答案 0 :(得分:1)
我认为这就是你想要的:
let users = this.af.database.list('listOfUsers/');
var profiles = users.flatMap(t =>
Observable.forkJoin(
t.map(x => this.af.database.object('profiles/' + x.uid))
)
);
return profiles;
答案 1 :(得分:0)
如果您希望函数返回Observable<UserProfile[]>
而不是Observable<UserProfile>
,则需要添加.toArray()
,以便将所有排放物放入一个阵列发射中:
return singleuser.flatMap(
profile => this.af.database.object('profiles/' + profile['$key'])
)
.toArray();