使用 switchMap RxJS 时如何处理可能 return 为空的可观察对象

How to handle an observable that may return empty when using switchMap RxJS

RxJS应该如何处理以下场景?

我有一个 observable,它通过从 url 参数中提取的 ID 查询我的 Firestore 数据库以获取提交:

this.submission$ = this.db.collection$('submissions', ref => ref.where('submissionArtistUID', '==', this.artistParam));

对于订阅此可观察对象的元素,submission$ return 是一个提交对象数组。因此,一旦 submission$ 已解决,我可以使用 switchMap 查询我的 users table:

this.user$ = this.submission$.pipe(
  switchMap(
    (submissions) => {
      return this.db.collection$('users', ref => ref.where('userUID', '==', submissions[0].submissionUserUID ))
    }
  )
)

但是,提交查询不保证 return 任何东西。因此,当我在 return 为空的提交上使用 switchMap 时,我无法访问以下 属性:submissions[0].submissionUserUID,并且在控制台中显示此错误:

Cannot read property 'submissionUserUID' of undefined

这是有道理的,因为 submission$ 在尝试在 switchMap 的 return 语句中使用之前解析为空对象。

那么我该如何使用 RxJS 来解释这样的场景呢? switchMap 是正确的使用方法吗?谢谢!

您可以在 switchmap 之前使用过滤器运算符。您的代码可能如下所示。

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 ))
    }
  )
)