【发布时间】:2018-06-22 02:41:40
【问题描述】:
在我的应用程序中,我有从自定义基础服务继承的服务(正在调用其余服务),该基础服务定义了在所有其他服务中使用的通用方法和属性。其中一个参数是我的休息服务的基本网址,它在环境下使用变量。但是现在要求使此 url 来自配置文件。所以我必须使用 httpclient 来获取它,这提出了一个问题,现在当实际服务尝试使用基本 url 时,它还没有解决。有没有办法等到那个电话解决? 我的代码如下:
base-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);
});
}
}
一些数据.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 我的问题是当我运行 getSomeData() this.apiUrlBase is undefined b/c the promise 但尚未解决。我需要一种方法来延迟这些调用,直到 this.apiUrlBase 被基础服务填充。
标签: angular