2017-08-14 60 views
0

对于我们的应用程序,我们需要从外部URL读取我们的配置,例如http://myhost/config.json。这个配置文件包含一个apiUrl,我们应该使用所有其他http请求(Rest)。加载外部配置,并将此配置用于另一个http调用

我试图使用APP_INITIALIZER与调用我们的服务来加载配置的工厂方法。这会返回一个Observable。

当我们打开我们的页面时,会执行获取请求以获取我们所有的客户。这是通过一个http请求完成的,该请求应该使用配置中的apiUrl。

但是,系统不会等到第一次调用(获取配置)准备就绪,因此apiUrl尚不可用。

一种选择是包装每次调用类似(伪):

this.configService.getConfig().subscribe(config => { 
    this.customerService.getCustomers(config); 
}) 

这不是因为者优先其他开发商应该只是直接调用的CustomerService,而不应理会配置。

当我们可以在构造函数中注入Config对象并直接使用它时,应该会很好。这可能吗?

如果不是,我如何确保配置可用于所有其他API调用(启动时加载)?像一个同步的http.get请求。

角版本4.3.4

+0

请给出一个[mcve],APP_INITIALIZER中的一个承诺肯定应该得到解决。 – jonrsharpe

+0

它已经得到解决,但它在第二次获得客户电话后结束 – Stefan

+0

我的意思是在应用程序的其他部分开始之前 - 如果这不起作用,请在GitHub上提出问题(请参阅https://github.com/angular/)角/问题/ 14615)。 – jonrsharpe

回答

0

看来,当我转换的可观察到它正确地等待一个承诺。

return configObservable.toPromise();