Blog

RxJS observableのarrayを返す of関数

目的

Validationの処理を書きたい

Fielduserコレクションに userIdとFieldIdの複合キーがある時は、保存しない処理

下記関数で、クロージャーのdocs.length が0なのに処理が走ってしまった。エラーになったので、それを修正する。

//Observable<AppTmpUser[]>の戻値が必要
getTmpUsersByEmail(userId: string, email: string): Observable<AppTmpUser[]> {
    return collection(
      db.collectionGroup(TmpUserEntity.CollectionName)

//Firebaseの複合indexを登録してある
      .where('email', '==', email)
      .where('deleted', '==', false))
      .pipe(
      switchMap(docs => {

//ここの値 docs.length が0 で処理が走ってしまいエラー
        console.log(`TmpUser Docs is ${docs.length}`)

RxJS の of関数 を利用して、return する。

if (!docs.length){
          return of([]) 
        }

RxJS of関数

ofは関数 戻値にObservableの配列を返却してくれる

RxJS公式サイト

https://rxjs.dev/api/index/function/of

callBackのdocs.length は 0 それが trueならretrun

0自体は、falseの意味を持つので、if(!docs.length)trueとなり if文が実行される

もしこう書くとエラーになる. Observableな配列の戻値が必要

if (!docs.length){
          return       //error
  }

この関数では、戻値は Observable<AppTmpUser[]> を返却しないといけない

なので RxJSの of関数を利用する

RxJSの ofは関数なので、空の配列を渡すことで、Observableな配列を返却してくれる。

便利だね。

めでたし、めでたし。


<< Previous Blog Japan's majority management
Next Blog>> Why Japanese politics is third-class