У меня небольшие проблемы с Angular9, Firestore6 и оператором combineLatest
rx js.
У меня одна коллекция users
и другая коллекция items
. У одного пользователя может быть несколько элементов, но по старинке, во многих отношениях, так как элементы являются основными данными (неизменяемыми), а таблица мостов объединяет обе коллекции с дополнительными данными:
предметы
- яблоко
- название: "яблоко"
- цвет: "зеленый"
user
- items
- uid
- uid: "яблоко"
- количество: 23
Поэтому мне нужно получить список предметов вошедших в систему user
, объединяющих обе коллекции:
- user
- items
- uid
- uid: "apple"
- количество: 23
- join
- name: "яблоко"
- цвет: "зеленый"
Это мой код:
import { AngularFireAuth } from '@angular/fire/auth';
import { AngularFirestore } from '@angular/fire/firestore';
import { switchMap, map } from 'rxjs/operators';
import { combineLatest, of } from 'rxjs';
getUserItems() {
return this.angularFireAuth.authState.pipe(
switchMap(user => {
if (user) {
return this.angularFirestore.collection<any>(`users/${user.uid}/items`).valueChanges()
.pipe(
switchMap(userItems=> {
return combineLatest([
of(userItems),
userItems.map(userItem=> this.angularFirestore.doc<any>(`items/${userItem}`).valueChanges())
])
}),
map(([userItems, items]) => {
console.log(userItems, items);
return userItems.map(userItem => {
return {
...userItem,
join: items.find(item => item.uid === userItem.uid)
}
})
})
)
}
})
)
}
Но в map(([userItems, items])
вместо [any[], any[]]
я получаю [any[], Observable<any>]
, он не компилируется, потому что Property 'find' does not exist on type 'Observable<any>'
.
Я полагаю, Это потому, что второй .valueChanges()
не разрешается, но я не знаю, что я делаю неправильно. Кто-нибудь может мне помочь?
Я уже пробовал другие ответы, такие как этот , но пока безуспешно.
Заранее спасибо.