Возврат пользовательских данных из firestore в пользовательский сервис, возвращающий ноль - PullRequest
0 голосов
/ 19 февраля 2019

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

this.user$ = this.afAuth.authState.pipe(
  switchMap(
    (auth) =>
      (auth)
        ? this.afs.doc(`users/${auth.uid}`).valueChanges()
        : of(null)
  ));

this.user$.subscribe((user) => this.user = user);

console.log(this.user)

Итак, как уже упоминалось, консольрегистрирующий пользователь в рамках подписки действительно возвращает текущий объект, но внешний console.log этого.user возвращает 'undefined'

EDIT

Я пытаюсь передатьданные из this.user в следующую функцию get:

 get userDb() {
    return this.user;
  }

, которая затем может использоваться во всем приложении.

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Таким образом, как уже упоминалось, пользователь, регистрирующий консоль в рамках подписки, возвращает текущий объект, но внешний файл console.log этого.user возвращает 'undefined'

, вы ничего не можете сделатьпо этому поводу вы должны подписаться на поток и дождаться его возвращения, что является природой асинхронной операции.Вся ваша логика, которая будет зависеть от this.user, должна оставаться внутри обратного вызова

this.user$.subscribe((user) => {
  this.user = user;
  console.log(this.user);
});
0 голосов
/ 19 февраля 2019

Не забывайте, что this.user$.subscribe ... является асинхронным , поэтому обратный вызов, предоставленный вами в методе подписки, будет выполнен ПОСЛЕ исключения оператора console.log.

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