将Firestore文档添加到observable

问题描述 投票:0回答:1

我有一个可观察的user,我想为它添加一个Firestore文档。现在我在我的IDE中遇到错误:“类型'DocumentData'不能分配给'Observable'类型。”我该怎么做?我也想听听变化。

//The observable
user: Observable<User>;

//Fetching the user, then trying to assign it to the variable
this.afs.doc(`Users/${uid}`).ref.get().then((doc)=> {
    this.user = doc.data();
  })
javascript angular google-cloud-firestore observable
1个回答
0
投票

如果您使用的是angularfire2,您可以使用.valueChanges()来监听Firestore的更改

user$: Observable<User> = this.afs.doc(`Users/${uid}`).valueChanges();

userSubscription: Subscription = this.user$
  .subscribe((data) => {
     console.log('user$ observable data: ', data);
  });

如果要包含元数据(例如文档ID),可以使用.snapshotChanges()并使用几个maps获取数据。

如果您使用的是RxJS 6,它可能看起来像:

user$: Observable<User> = this.afs.doc(`Users/${uid}`)
  .snapshotChanges()
  .pipe(
     map(changes => {
        changes.map(change => {
           return change.payload.doc.data();
        })
     })
  );

userSubscription: Subscription = this.user$
  .subscribe((data) => {
     console.log('user$ observable data with metadata: ', data);
  });

或者相同的.snapshotChanges()功能,但更短:

user$: Observable<User> = this.afs.doc(`Users/${uid}`).snapshotChanges().pipe(
     map(changes => changes.map(change => change.payload.doc.data() )) );

userSubscription: Subscription = this.user$.subscribe((data) => console.log(data));
© www.soinside.com 2019 - 2024. All rights reserved.