首页 > 解决方案 > 使用 switchMap 中的 observable 将消息添加到 firestore

问题描述

这个问题是这个堆栈溢出问题的延续

this.firestoreService.addMessage(message) 不会将消息添加到数据库

addMessage() 在执行 tap((user) => console.log(user)) 之前返回,

   submit() {
     this.subscription = from(this.form.value.users)
      .pipe(
        finalize(() => {
          console.log('finalize'),
          this.dismiss()
        }),
        map(user => this.buildMessage(user)),
        switchMap((message) => this.firestoreService.addMessage(message))
      ).subscribe();

   }

  addMessage(data:Message):Observable<any> {
    console.log('addMessage');
    data.timestamp = firebase.firestore.FieldValue.serverTimestamp();
    return this.authService.currentUser$.pipe(
      tap((user) => console.log(user)),
      switchMap(user => {
        console.log('addMessage user: ', user);
        if (user.company) {
          return from(this.firestore
            .collection<any>(user.company)
            .doc(user.licence)
            .collection<any>(message)
            .add(data))

        } else {
          return of([]);
        }
        }
      )
     );
   }
    
output: 'addMessage'

no output: tap((user) => console.log(user)),

this.authService.currentUser$

get currentUser$() {
    return this.angularFireAuth.user.pipe(
      tap((user) => console.log(user)),
      filter(user => !!user),
      switchMap(user => this.userService.user$(user.uid))
    );
  }

标签: angulargoogle-cloud-firestoreobservable

解决方案


推荐阅读