【问题标题】:Load external config, and use this config for another http call加载外部配置,并将此配置用于另一个 http 调用
【发布时间】: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


【解决方案1】:

似乎当我将 observable 转换为 Promise 时,它​​会正确等待。

return configObservable.toPromise();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-15
    • 1970-01-01
    相关资源
    最近更新 更多