AngularFire无法更新文档,因为无法获取文档参考ID

时间:2019-09-25 07:27:18

标签: angular typescript firebase

我正在做一个更新功能,该功能将基于与已认证用户的uid绑定的文档uid来获取所需的文档。

在另一个函数中,我使用可以正常工作的相同方法从集合中获取数据,但是在将uid作为变量存储的函数中,它返回了我作为[object object]。

>

这是用来检索我当前用户数据的函数

this.user$ = this.afAuth.authState.pipe(
  switchMap(user => {
    if (user) {
      return this.afs.doc<any>(`users/${user.uid}`).valueChanges();
    } else {
      return null;
    }
  })
);

这将通过简单地致电例如获取我需要的字段user.username

但是,当尝试这样存储文档uid时

this.userID = this.afAuth.authState.pipe(
  switchMap(user => {
    if (user) {
      this.userID = user.uid;
    } else {
      return null;
    }
  })
); 

我的userID的值将只是[对象对象]

称为

updateUser(user: User) {
    this.userDoc = this.afs.doc(`users/${this.userID}`);
    this.userDoc.update(user);
  }

返回... / documents / users / [object Object]的未定义文档路径

然后我将如何跟踪文档ID以使更新生效?

2 个答案:

答案 0 :(得分:0)

更改此:

this.userID = this.afAuth.authState.pipe(
  switchMap(user => {
    if (user) {
      this.userID = user.uid;
    } else {
      return null;
    }
  })
); 

对此:

this.userID = this.afAuth.authState.pipe(
  switchMap(user => {
    if (user) {
      this.userIDs= user.uid;
    } else {
      return null;
    }
  })
); 

您需要使用其他变量(this.userIDs)名称来存储user.uid

答案 1 :(得分:-1)

问题在于,您正在存储同时为final_data = [1, 2, 3, 4, 0, 0 ,0, 0] this.userID的预订分配值。删除分配:this.userID,现在它将正确存储!而是将订阅存储在另一个变量中,然后可以在需要时取消订阅该变量:

this.userID = this.afAuth.authState