【发布时间】:2017-08-15 17:01:40
【问题描述】:
对于我们的应用程序,我们需要从外部 url 读取我们的配置,例如 http://myhost/config.json。此配置文件包含一个 apiUrl,我们应该使用它来使用所有其他 http 请求 (Rest)。
我尝试将 APP_INITIALIZER 与工厂方法一起使用,该方法调用我们的服务来加载配置。这将返回一个 Observable。
当我们打开页面时,会执行获取请求以获取所有客户。这是通过一个 http 请求完成的,该请求应该使用配置中的 apiUrl。
但是,系统不会等到第一次调用(获取配置)准备好,所以 apiUrl 还不可用。
一种选择是将每个调用包装成类似(伪):
this.configService.getConfig().subscribe(config => {
this.customerService.getCustomers(config);
})
这不是首选,因为其他开发人员应该直接调用 customerService,而不应该打扰配置。
当我们可以在构造函数中注入 Config 对象并直接使用它时应该很好。这可能吗?
如果没有,我如何确保配置可用于所有其他 API 调用(在启动时加载)?类似于同步的 http.get 请求。
Angular 4.3.4 版
【问题讨论】:
-
请给minimal reproducible example,APP_INITIALIZER 中的promise 肯定会得到解决。
-
它正在解决,但在第二次呼叫客户后完成
-
我的意思是在应用程序的其余部分启动之前 - 如果这不起作用,请在 GitHub 上提出问题(参见例如github.com/angular/angular/issues/14615)。
-
看起来同样的问题。所以通常所有 APP_INITIALIZERS 都应该在继续之前解决。
标签: angular