AngularFire Невозможно обновить документ, так как не удалось получить идентификатор ссылки на документ - PullRequest
0 голосов
/ 25 сентября 2019

Я делаю функцию обновления, которая будет извлекать необходимый документ на основе его идентификатора документа, который привязан к идентификатору пользователя, прошедшего проверку подлинности.

в другой функции, где я выбираю данные из коллекции, используя тот же метод, который работает нормально, но для функции, в которой я храню uid как переменную, он возвращает меня как [объектный объект].

эта функция вызывается для получения моих текущих пользовательских данных.

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;
    }
  })
); 

Мой идентификатор пользователя будет просто [объектный объект]

при вызове этого

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

, возвращая неопределенноепуть к документу ... / documents / users / [объект объекта]

как мне тогда отследить идентификатор документа для обновления для работы?

Ответы [ 2 ]

0 голосов
/ 26 сентября 2019

Проблема заключается в том, что вы сохраняете назначение как значения this.userID, так и подписку this.userID.Удалите присвоение: this.userID = this.afAuth.authState и теперь оно будет сохранено правильно!Вместо этого сохраните подписку в другой переменной, к которой можно при необходимости отписаться:

this.mySubscription = this.afAuth.authState.pipe(
  switchMap(user => {
    if (user) {
      this.userID = user.uid;
    } else {
      return null;
    }
  })
);
0 голосов
/ 25 сентября 2019

Измените это:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...