如何用RxJS处理以下情况?
我有一个可观察的对象,它通过从url参数中提取的ID在Firestore数据库中查询提交内容:
this.submission$ = this.db.collection$('submissions', ref => ref.where('submissionArtistUID', '==', this.artistParam));
对于预订此可观察元素的元素,submission$
返回一个提交对象数组。因此,switchMap
解决后,我就可以使用users
查询我的submission$
表:
this.user$ = this.submission$.pipe(
switchMap(
(submissions) => {
return this.db.collection$('users', ref => ref.where('userUID', '==', submissions[0].submissionUserUID ))
}
)
)
但是,不能保证提交查询返回任何内容。因此,当我在返回空白的提交中使用switchMap
时,无法访问以下属性:submissions[0].submissionUserUID
,并且在控制台中显示此错误:
Cannot read property 'submissionUserUID' of undefined
这很有意义,因为submission$
在尝试在switchMap的return语句中使用之前先解析为空对象。
那么,如何使用RxJS解决这种情况? switchMap使用正确吗?谢谢!
答案 0 :(得分:3)
您可以在切换映射之前使用过滤器运算符。您的代码可能看起来像这样。
this.user$ = this.submission$.pipe(
filter(submissions => Object.keys(submissions).length > 0),
switchMap(
(submissions) => {
return this.db.collection$('users', ref => ref.where('userUID', '==', submissions[0].submissionUserUID ))
}
)
)