在我的应用程序中,我有从自定义基本服务继承的服务(即调用其余服务),这些服务定义了在所有其他服务中使用的常用方法和属性。其中一个参数是我的休息服务的基础URL,它在环境下使用了一个变量。但是现在需要使这个URL来自配置文件。所以我将不得不使用httpclient,它提出了一个问题,现在在实际服务尝试使用基本url时,它尚未解决。有没有办法如何等待,直到这个电话解决? 我的代码如下所示:Angular 4如何等待httpclient完成
基service.service.ts:
export class BaseService{
protected apiUrlBase: string;
constructor(protected _http: HttpClient) {
// some logic
this.getConfigData()
.subscribe(
x => {
this.apiUrlBase = x.apiUrlBase;
}
);
}
getConfigData(): Observable<any> {
return this._http.get(
'../../assets/config.json'
)
.do(x => {
})
.catch(error => {
alert('Unable to read configuration file:' + JSON.stringify(error));
return Observable.throw(error);
});
}
}
一些-data.service.ts:
@Injectable()
export class TestService extends BaseApiService {
private get _someDataServiceUrl(): string {
return this.apiUrlBase + '/api/v1/somedata';
}
constructor(_http: HttpClient) {
super(_http);
}
getSomeData(): Observable<ISomeData[]> {
return this._http.get<ISomeData[]>(this._someDataServiceUrl)
.do(this.handleSuccessResponse)
.catch(this.handleErrorResponse);
}
}
我如何能在我的服务等待任何建议直到apiUrl得到解决,或者我该怎么做才能使用我的基本服务,并使用子服务依赖的数据解决,直到他们使用它?
是的,你可以使用订阅里面的'completion'回调函数,你面对什么确切的问题。修改你的帖子它会混淆 – Aravind
@Aravind我的问题是当我运行getSomeData()时this.apiUrlBase是未定义的B/C承诺尚未解决。我需要一种方法来延迟这些调用,直到this.apiUrlBase被基础服务填充。 – AlexanderM