2017-08-30 80 views
0

我的数据结构为:

users 
KEYnjkhkugl 
    uid: JHKJGHKJUYKJAHN 
KEYkjbjhnjs 
    uid: UKHUFJGHGBHKTDD 

现在我需要得到一个$关键,通过火力地堡产生的,当我知道只有uid。所以我这样做:

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

物业$键不输入任何[存在]

回答

0

您使用订阅的方式不起作用。但是,为了回答你的问题,用火力SDK是这样的:

getUserKeyFromUid(uid:string) : Observable<string> { 
    return this.afDb.object('users/' + uid) 
       .do(console.log); 
} 

不能使用订阅填写的变量,因为在订阅功能被称为异步。你做到这一点的方式如下:
1. let userKey; // userKey is undefined
2. const user $ = ... // no effect
3. user $ .subscribe(...); //开始调用firebase
4. return userKey; //返回undefined
5. OBJ => USERKEY = OBJ $键//现在,USERKEY将与按键分配,但它的后期

所以认购可观察到的,你这样调用该函数:

... { 
const userKey$ = getUserKeyFromUid(uid); 
userKey$.subscribe(); 
} 
+0

我相信Firebase有自己的Observable实现,名为FirebaseObservable。不知道这里是否重要。 – nGAGE

+0

订阅您调用它的方法的结果。检查我更新的答案 –

+1

是的,你说得对。我将在我的用户授权服务下将其移入主题。 –

相关问题