我的数据结构是:
users
KEYnjkhkugl
uid: JHKJGHKJUYKJAHN
KEYkjbjhnjs
uid: UKHUFJGHGBHKTDD
现在,当我只知道uid
时,我需要获取由Firebase生成的$ key。所以我这样做:
getUserKeyFromUid(uid:string) : string {
let userKey;
const user$ = this.afDb.list('users', {
query: {
orderByChild: 'uid',
equalTo: uid
}
})
.do(console.log);
user$.subscribe(obj => userKey = obj.$key);
return userKey;
}
我认为它运作良好,但我无法理解为什么如果我删除.do(console.log);
我在$key
下遇到编译错误
任何[]
类型都不存在属性$ key
答案 0 :(得分:0)
您使用订阅的方式不起作用。但要回答你的问题,请使用firebase sdk:
getUserKeyFromUid(uid:string) : Observable<string> {
return this.afDb.object('users/' + uid)
.do(console.log);
}
您不能使用subscribe来填充变量,因为subscribe中的函数称为async。你这样做的方式如下:
1.让userKey; // userKey未定义
2. const用户$ = ... //没有效果
3. user $ .subscribe(...); //开始调用firebase
4. return userKey; //返回undefined
5. obj =&gt; userKey = obj。$ key //现在,userKey将被分配密钥,但是要迟到了
所以订阅你可以调用函数的observable:
... {
const userKey$ = getUserKeyFromUid(uid);
userKey$.subscribe();
}