2017-09-20 4 views
0

Ich kann das nicht herausfinden. Ich habe einen DataService (a.k.a. ds) und eine Komponente. Die Komponente ruft eine Funktion doSUserExist() auf:eckig 4 ​​funktion return boolean = undefined

Dies erscheint immer als undefiniert. Hier ist die Funktion in Data:

doesUserExist(){ 
    var bool:boolean; 
    var myvars = this.af.list('/accounts/'+this.uid) as FirebaseListObservable<Listing[]>; 

    myvars.subscribe(data=>{ 
      console.log("length="+data.length) 
      if (data.length===0){ 
      bool = false;   
      }  
     }) 
     return bool; 

     } 

Ich versuchte, die var bool:boolean als öffentliche Variable setzen auch, aber egal, was passiert, das kommt als undefiniert.

Ich habe auch var bool:boolean=true und Bool WILL oben in der if-Anweisung (ich habe über console.log geprüft) und statt dem Rückweg als false es ist immer noch true pro die Bezeichnung oben falsch entsprechen.

Also was mache ich falsch damit? Ich habe um gesucht und ich habe versucht:

Boolean([return bool]) aber-Code nicht mag, dass

ich auch die returns in der if-Anweisung setzen versucht. Das funktioniert nicht.

Vielen Dank!

+1

Mögliches Duplikat [Wie kann ich die Antwort von einem beobachtbaren/http/Asynchron-Aufruf in angular2 zurückkehren?] (Https://stackoverflow.com/questions/43055706/how-do-i-return-the -response-from-beobachtbar-http-async-call-in-angular2) – n00dl3

Antwort

0

Sie haben Bool nicht definiert, und es wird nicht an Ihrem Abonnement weitergegeben (da es asynchron ist, also könnte die Antwort später kommen), wenn Sie also bool zurückgeben, hat es keinen Wert.

Und da Ihre Funktion auf der Länge Ihrer Antwort basiert, können Sie diesen Boolean entfernen.

doesUserExist(): Observable<boolean> { 
    var myvars = this.af.list('/accounts/'+this.uid) as FirebaseListObservable<Listing[]>; 

    return myvars.subscribe(data=>{ 
     console.log("length="+data.length) 
     return data.length === 0; // true if that's the case, or false 
    }) 
    } 
+0

Ich sehe nicht, dass 'dusUserExist' Funktion gibt etwas zurück – yurzui

+0

Vergessen Sie den Rückgabewert, danke! –

+0

Ja, das habe ich auch getan, indem ich boolean auf "true" gesetzt habe, aber als "wahr" zurückgegeben würde, egal ob die IF-Anweisung es in "false" ändert. Sie haben erwähnt, dass die Daten asynchron sind. sagst du, dass die Seite ein paar Sekunden brauchen könnte, damit alle richtig funktionieren? Oder besser gesagt (nachdem ich über meine Antwort nachgedacht habe), dass diese Funktion in der Komponente angefordert und bearbeitet wird, bevor sie die Antwort vom dataService erhält? – Groovdafied