从用户服务中的Firestore返回用户数据,返回null

时间:2019-02-19 11:17:14

标签: javascript angular typescript firebase-authentication google-cloud-firestore

我正在尝试从Firestore获取用户模型。我订阅了它,并且可以在订阅中记录用户模型,但是当我尝试将结果设置为变量并在订阅之外使用它时,它将返回null。

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)

因此,如前所述,订阅中的控制台日志记录用户确实返回当前对象,但是this.user的外部console.log返回“未定义”

编辑

我正在尝试将this.user中的数据传递给以下get函数:

 get userDb() {
    return this.user;
  }

然后可以在整个应用程序中使用。

2 个答案:

答案 0 :(得分:1)

请不要忘记this.user$.subscribe ...asynchronous,因此,您在subscription方法中提供的回调将在console.log语句执行后执行。

答案 1 :(得分:1)

  

因此,如前所述,订阅中的控制台日志记录用户确实   返回当前对象,但是this.user的外部console.log   返回“未定义”

您无能为力,您必须订阅流并等待其返回,这就是异步操作的本质。您所有将取决于this.user的逻辑都需要保留在回调中

this.user$.subscribe((user) => {
  this.user = user;
  console.log(this.user);
});