簡體   English   中英

如何處理使用switchMap RxJS時可能返回空的observable

[英]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));

對於訂閱此observable的元素, submission$返回一個提交對象數組。 因此,一旦submission$已解決,我可以使用switchMap查詢我的users表:

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

這是有道理的,因為在嘗試在switchMap的return語句中使用之前,submit submission$解析為空對象。

那么如何使用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 ))
    }
  )
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM