我正在尝试从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;
}
然后可以在整个应用程序中使用。
答案 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);
});