【发布时间】:2020-04-17 17:01:22
【问题描述】:
我在使用 Angular9、Firestore6 和 combineLatest rxjs 运算符时遇到了一些问题。
我有一个 users 集合和另一个 items 集合。一个用户可以有多个项目,但采用老式的多对多关系方式,其中项目是主数据(不可修改),桥接表将两个集合与附加数据连接起来:
-
项目
- 苹果
- 名称:“苹果”
- 颜色:“绿色”
- 苹果
-
用户
- 项目
- uid
- uid:“苹果”
- 数量:23
- uid
- 项目
所以我需要获取登录user的项目列表,加入两个集合:
- 用户
- 项目
- uid
- uid:“苹果”
- 数量:23
- 加入
- 名称:“苹果”
- 颜色:“绿色”
- uid
- 项目
这是我的代码:
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() 没有得到解决,但我不知道我做错了什么。谁能帮帮我?
我已经尝试过其他答案,例如this one,但到目前为止没有运气。
提前致谢。
【问题讨论】:
标签: javascript angular google-cloud-firestore