Я пытаюсь получить некоторые связанные данные на основе значений, возвращаемых наблюдаемым из Firestore.
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;
}
это дает мне правильные результаты:
выход
Но я хочу выполнить расширенную сортировку / фильтрацию на наблюдаемой usersWithResults
. Проблема в том, что свойство 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;
}
Я думаю, что проблема связана с тем, что внутренняя наблюдаемая еще не завершена, но я не могу найти правильный оператор rxjs, чтобы делать то, что я хочу.
Любой совет будет оценен.
Спасибо.