2017-10-12 6 views
-1

macht Ich habe diesen Angular 4-Dienst, der eine HTTP-Anfrage macht und die Daten zurückgibt. Wenn ich jedoch das Ergebnis in der Konsole protokolliere, bekomme ich undefined.Angular Service, der HTTP-Anfrage

Das ist mein Service:

import { Injectable } from '@angular/core'; 
import { HttpClient } from '@angular/common/http'; 
@Injectable() 
export class MenuService { 
constructor(private http: HttpClient) { 

} 
menu: any; 

getMenu(){ 
    this.http.get('/assets/MENU.json').subscribe(data => { 
     // Read the result field from the JSON response. 

     let newValue = JSON.stringify(data).replace('{"Node":', '['); 
     newValue = newValue.substring(0,newValue.length - 1); 
     newValue+="]"; 
     this.menu=JSON.parse(newValue); 


     }); 
     console.log(this.menu); 
     return this.menu; 
} 
} 
+0

Versuchen Sie zunächst, die Daten in der Anforderungsfunktion zu console.log zu loggen, um zu überprüfen, was Sie in Ihrer Antwort wirklich erhalten. –

+0

@ZiyaddinSadigov innerhalb der Anfrage bekomme ich das JSON-Objekt – eli

+1

@ZiyaddinSadigov, die sie nur weiter verwirren wird, da sie die Antwort * innerhalb des Callback * haben. Der Punkt ist, dass ** dies asynchron ist **. – jonrsharpe

Antwort

1

Der Grund, warum Sie undefiniert bekommen ist, dass Sie Konsole außerhalb der Pfeil-Funktion verwenden. Denken Sie daran, dass dies ein asynchroner Aufruf ist, und zu dem Zeitpunkt, an dem Sie console.log verwenden, sind keine Daten darin enthalten.

Probieren Sie die Verwendung von console.log innerhalb der Funktion und Sie erhalten Ihr Ergebnis.