2017-08-30 75 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

是的,你說得對。我將在我的用戶授權服務下將其移入主題。 –

相關問題