Validationの処理を書きたい
Fielduserコレクションに userIdとFieldIdの複合キーがある時は、保存しない処理
//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}`)
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な配列を返却してくれる。
便利だね。
めでたし、めでたし。