Angular 服务不同步

Angular 服务不同步,angular,Angular,我有一个用于调用webapi的服务 webapi URL是从本地json文件中读取的 问题是服务方法调用了错误的webapi URL,我怀疑原因是在反构造函数代码完成执行之前调用了这些方法 这是可疑代码: 建造师 示例法 Get_LavorazioneRicette():可观察{ var url=this.baseUrl+“api/masterdata/get/LavorazioneRicette”; 返回this.http.get(url,this.getRequestOptions) .ma

我有一个用于调用webapi的服务

webapi URL是从本地json文件中读取的

问题是服务方法调用了错误的webapi URL,我怀疑原因是在反构造函数代码完成执行之前调用了这些方法

这是可疑代码:

建造师 示例法
Get_LavorazioneRicette():可观察{
var url=this.baseUrl+“api/masterdata/get/LavorazioneRicette”;
返回this.http.get(url,this.getRequestOptions)
.map(response=>response.json())
.接住(这个.把手错误);
}
我怎样才能解决这个问题


感谢支持

基本规则:不要在服务中使用订阅。这总是使代码变得复杂和困难

这里不需要构造函数。你可以这么做

getBaseUrl(): Observable<string>{ 
   if(!this.baseUrl){
     this.baseUrl = data.ReportApp_WebApi 
   }
  return Observable.of(this.baseUrl);
}

Get_LavorazioneRicette() : Observable<any> {
    return getBaseUrl()
        .map(baseUrl=> baseUrl+ "api/masterdata/get/LavorazioneRicette")
        .flatMap( url => this.http.get(url, this.getRequestOptions)
                             .map(response => response.json())
      .catch(this.handleError);
}
getBaseUrl():可观察的{
如果(!this.baseUrl){
this.baseUrl=data.ReportApp\u WebApi
}
返回可观察的(this.baseUrl);
}
Get_LavorazioneRicette():可观察{
返回getBaseUrl()
.map(baseUrl=>baseUrl+“api/masterdata/get/LavorazioneRicette”)
.flatMap(url=>this.http.get(url,this.getRequestOptions)
.map(response=>response.json())
.接住(这个.把手错误);
}
当获取url是异步的时,上面的代码很好,对于同步的也很好。 但是本地存储不是异步的。所以,不需要太担心。你可以这样做。你甚至不需要存储baseUrl

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);
}
Get_LavorazioneRicette():可观察{
const url=data.ReportApp_WebApi+“api/masterdata/get/LavorazioneRicette”;
返回this.http.get(url,this.getRequestOptions)
.map(response=>response.json()
.接住(这个.把手错误);
}
getBaseUrl(): Observable<string>{ 
   if(!this.baseUrl){
     this.baseUrl = data.ReportApp_WebApi 
   }
  return Observable.of(this.baseUrl);
}

Get_LavorazioneRicette() : Observable<any> {
    return getBaseUrl()
        .map(baseUrl=> baseUrl+ "api/masterdata/get/LavorazioneRicette")
        .flatMap( url => this.http.get(url, this.getRequestOptions)
                             .map(response => response.json())
      .catch(this.handleError);
}
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);
}