rxjs:如何从Firestore获取相关数据

时间:2018-05-09 09:36:48

标签: firebase rxjs google-cloud-firestore angularfire2

我正在尝试根据Firestore中的observable返回的值获取一些相关数据。

getChampionshipResults(minimumCompetionCount: number): Observable<User[]> {

    const usersWithResults = this.afs.collection<User>('users')
        .valueChanges()
        .map(users => {
            return users.map(user => {
                this.afs.collection<Result>('results', ref => ref
                    .where('userUid', '==', user.uid)
                    .orderBy('position', 'asc')
                    .limit(minimumCompetionCount))
                    .valueChanges()
                    .take(1)
                    .subscribe(results => {
                        user.results = results;
                    });
                return user;
            });
        })
        .do(el => console.log(el));

    return usersWithResults;
}

这给了我正确的结果: output

但我想对usersWithResults observable进行一些高级排序/过滤。问题是我想要对user.results属性进行排序时undefined属性为getChampionshipResults(minimumCompetionCount: number): Observable<User[]> { const usersWithResults = this.afs.collection<User>('users') .valueChanges() .map(users => { return users.map(user => { this.afs.collection<Result>('results', ref => ref .where('userUid', '==', user.uid) .orderBy('position', 'asc') .limit(minimumCompetionCount)) .valueChanges() .take(1) .subscribe(results => { user.results = results; }); return user; }); }) .do(el => console.log(el)) // add sorting .map(users => { return users.sort((a, b) => { // this is undefined console.log(a.results); // simplified dummy sort return 1; }); }); return usersWithResults; }

flatMap

我认为问题来自内部observable尚未完成的事实,但我无法找到正确的rxjs运算符来做我想做的事。

任何建议都将不胜感激。 感谢。

0 个答案:

没有答案