2017-06-19 1 views
1

Ich habe einen Dienst, der verwendet wird, um eine Webapi aufrufen.Dienst nicht sinchronized

Die Webapi-URL wird von einer lokalen JSON-Datei gelesen.

Das Problem ist, dass die Dienstmethode die falsche Webapi-URL aufruft und ich vermute, dass die Ursache darin liegt, dass die Methoden aufgerufen werden, bevor der Konstruktorcode die Ausführung beendet hat.

Dies ist der Verdacht Code:

Konstruktor

constructor(private http: AuthHttp, private router: Router, private paramService: ParamService) { 

    this.paramService.get_Config().subscribe(
     data => { 

     this.baseUrl = data.ReportApp_WebApi; 
     } 
    );   

    } 

Beispiel Methode

Get_LavorazioneRicette() : Observable<any> { 
    var url = this.baseUrl + "api/masterdata/get/LavorazioneRicette"; 

    return this.http.get(url, this.getRequestOptions) 
     .map(response => response.json()) 
     .catch(this.handleError); 
    } 

Wie kann ich dieses Problem lösen?

Dank

Antwort

1

Basisregel unterstützen: Sie nicht in Dienst abonnieren verwenden. Das macht den Code immer komplex und schwierig.

Sie benötigen hier keinen Konstruktor. Du kannst das einfach tun.

Der obige Code ist gut, wenn URL asynchron ist, funktioniert auch für synchrone. Aber localStorage ist nicht asynchron. Also, keine Notwendigkeit, sich viel zu sorgen. Du kannst das einfach machen. Sie müssen nicht einmal die BaseUrl speichern.

Get_LavorazioneRicette() : Observable<any> { 
const url = data.ReportApp_WebApi + "api/masterdata/get/LavorazioneRicette"; 
    return this.http.get(url, this.getRequestOptions) 
       .map(response => response.json() 
     .catch(this.handleError); 
}