2017-12-27 3 views
0
user: User 

this.httpService.getCurrentUser() 
.subscribe(
    data => { 
     this.user = JSON.parse(data["_body"]).value[0]; 
      console.log("1" +this.user) 
     }, 
    error => console.error(error) 
    ); 
console.log("2"+this.user); 

So in dieser Funktion bekomme ich meine current und lege sie in meine Variable und wenn ich meine this.user das erste Mal anmelden es die richtigen Informationen in ihm hat, sondern auf der es zur zweiten log sagt nur [Objekt] [Objekt], aber warum? Es scheint, wie die Antwortdaten nur in der Variablen in dieser Funktion ist aber verlieren sie späterAngular speichern Antwortdaten in variable

Antwort

0

von console.log("2"+this.user); mit Ihnen sagen, dass Javascript this.user Objekt zuerst in einen String zu konvertieren (die [object Object] ist) und dann tun Concat mit 2.

Denken Sie auch daran, dass zuerst console.log(2...) passieren wird. Denn die console.log(1...) wird nach dem Abrufen von Daten vom Server geschehen.

Auch ich sehe, dass Sie die Antwort vom Server this.User zuweisen, während der this.user Ausdrucke werden - beachten Sie die Hauptstadt U.

Meine Vermutung ist, dass Sie ein Objekt vom Server zu laden. Verwenden Sie einfach console.log(this.user) um, was die Antwort ist.

+0

macht für mich keinen Sinn Warum denkt Javascript, dass es nur in der zweiten in String konvertieren soll? – Kai

+0

Es würde helfen, wenn Sie die genaue Ausgabe bereitstellen. Ich denke, Sie haben einen voreingestellten Wert in 'this.user' und drucken daher die erwartete Ausgabe. Während Sie nach dem Abrufen von Daten vom Server dort ein Objekt zuweisen. –

+0

Was ich eigentlich versuche ist, das Benutzerobjekt von meinem API zu bekommen, dann sende es an meinen http.service (wo alle http.get, http.post, http.patch stuff ist) und lege es in eine Variable mit type user (Benutzer-Objekt hat alle Sachen, die ich von der API wie ID-Name und so weiter bekomme) in meinem http.service habe ich eine andere Funktion, die den Benutzer zurückgibt, den ich vorher speicherte. So kann ich von überall auf den currentUser zugreifen, indem ich einfach die Funktion – Kai

0

Sie müssen berücksichtigen, dass jedes Abonnement, das Sie haben, ein asynchroner Code ist.

this.httpService.getCurrentUser() 
.subscribe(
    data => { 
     // This may or not (probably not) run first 
     }, 
    error => console.error(error) // This may never run, if error doesn't occurs. 
    ); 

// This will run after the subscription is made. Almost always before the success callback. 
console.log("2"+this.user); 

Alles, was von einer asynchronen Antwort wie einer HTTP-Anfrage abhängt, sollte darin enthalten sein.

+0

Danke, das hat mir geholfen. Es funktioniert jetzt. – Kai

Verwandte Themen