【发布时间】:2018-11-09 15:39:08
【问题描述】:
我正在使用“身份验证服务”来保留所有用户身份验证功能。当用户通过身份验证时,我得到用户的 id 并从数据库表中获取相关记录,但我无法获取“角色”字段的值。我在构造函数中使用的代码是这样的:
constructor(
private _firebaseAuth: AngularFireAuth,
private db: AngularFireDatabase,
private router: Router) {
this.user = _firebaseAuth.authState;
this.user.subscribe(
(user) => {
if (user) {
this.userDetails = user;
this.userEmail = this.userDetails.email;
this.uid = this.userDetails.uid;
this.getUserRole(this.uid).subscribe(result => {
this.role = result.role;
console.log('role >>>>>>>>>>>>>', this.role);
});
console.log('uid >>>>>>>>>>>>>', this.uid);
console.log('role >>>>>>>>>>>>>', this.role);
}
else {
this.userDetails = null;
}
}
);
}
getUserRole(userId: string): Observable<any> {
return this.db.list('users', ref => ref.orderByChild('uid').equalTo(this.uid)).valueChanges()
.map(result => result[0]);
}
this.uid 具有正确的值,但 this.role 未定义。
我认为对数据库表的调用是异步的问题。 我怎样才能得到这个值?
【问题讨论】:
-
你试过
this.currUser.subscribe(val => this.role = val[0].role)吗? -
相同结果...
this.role在subscribe之外未定义 -
您应该等待订阅完成,否则您将永远无法定义它。
-
喜欢这个?
this.user.subscribe( val => this.role = val[0].role, () => );'()=>' 后面应该是什么?
标签: angular firebase firebase-realtime-database angular5