启动时的角度服务和请求依赖关系



我在angular 4中工作,我有一个appConfigService,它从settings.json文件中提供api应用程序的url,类似于:

private appConfig: AppConfig;
constructor(private http: Http) {
this.loadConfig().subscribe(e => this.appConfig = e);
}
public loadConfig(): Observable<AppConfig> {
return this.http
.get("appsettings.json")
.map(this.mapAppConfig)
.catch(this.handleError);
}

然后,我将该url用于以下所有请求。

它对返回url后发送的请求很好,但我对加载页面时发送的请求有问题(并且url还没有检索到(。

我知道我可以在启动时加载的服务中使用平面图功能,但我发现自己基本上创建了同一功能的两个实现:

private getBasicRequest(offset: number = 0, limit:number = 0 ): Observable<Response>{
if (!this.appConfigService.isAppConfigValid()) {
var urlObserver = this.appConfigService.loadConfig();
var request = urlObserver
.flatMap(responseFromConfigService =>
this.http.get(responseFromConfigService.apiBaseAddress + "/entries/" + this.searchTerm + "?offset=" + offset + "&limit=" + limit));
return request;
} else {
var url = this.appConfigService.getApiLink("entries/" + this.searchTerm + "?offset=" + offset + "&limit=" + limit);
return this.http.get(url);
}
}

应对这种情况的更好方法是什么?我试图让appConfigService服务在"启动"时启动,这将解决我的问题,但它不起作用。

始终使用可观察对象,而不是订阅它们。您的配置服务应该如下所示:

export class AppConfigService
{
public config$: Observable<AppConfig>;
constructor(private http: Http) {
this.config$ = this.http
.get("appsettings.json")
.map(this.mapAppConfig)
.catch(this.handleError)
.share();
}
}

所有其他服务都是这样使用的:

private getBasicRequest(offset = 0, limit = 0): Observable<Response> {
var config$ = this.appConfigService.config$;
var request = config$
.map(config => config.apiBaseAddress)
.map(base => `${base}/entries/${this.searchTerm}?offset=${offset}&limit=${limit})
.flatMap(url => this.http.get(url));
return request;
}

相关内容

  • 没有找到相关文章

最新更新