2017-08-30 1 views
0

Meine Datenstruktur ist:

users 
KEYnjkhkugl 
    uid: JHKJGHKJUYKJAHN 
KEYkjbjhnjs 
    uid: UKHUFJGHGBHKTDD 

Jetzt brauche ich einen $ Schlüssel zu erhalten, die von Firebase generiert, wenn ich nur die uid wissen. So mache ich das:

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; 
    } 

Ich denke, es funktioniert gut, aber ich kann nicht verstehen, warum, wenn ich .do(console.log); entferne ich Kompilierungsfehler unter $key bekommen, dass

Property $ key nicht auf Art existiert jede [ ]

Antwort

0

Die Art, wie Sie subscribe verwenden, funktioniert nicht. Aber um Ihre Frage zu beantworten, verwenden Sie die Feuerbasis sdk wie folgt aus:

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

Sie können keine Variable füllen verwenden abonnieren, da die Funktion in subscribe wird async genannt. Die Art und Weise, wie Sie es getan haben, wird folgendermaßen aussehen:
1. least userKey; // userKey ist nicht definiert
2. const user $ = ... // kein Effekt
3. user $ .subscribe (...); // firewall starten
4. return userKey; // gibt undefined
5. obj => USERKEY = obj $ key // jetzt wird USERKEY mit dem Schlüssel zugeordnet werden, aber es ist zu spät

die beobachtbare So zeichnen, wo Sie die Funktion wie folgt aufrufen:.

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

Ich glaube, Firebase hat seine eigene Implementierung eines Observable, genannt FirebaseObservable. Ich bin mir nicht sicher, ob das hier zählt. – nGAGE

+0

Abonnieren Sie das Ergebnis der Methode, in der Sie es aufrufen. Überprüfen Sie meine aktualisierte Antwort –

+1

Ja, Sie haben Recht. Ich werde dies unter Mein Benutzerautorisierungsdienst in Betreff verschieben. –

Verwandte Themen