【问题标题】:Making sure that a service is fully initialized before Angular injects it?确保在 Angular 注入服务之前完全初始化服务?
【发布时间】:2019-12-05 01:59:35
【问题描述】:

我有一项服务,当 Angular 启动时,它会获取文档并在 Map<string, Document> 中提供。

HttpClient 用于获取文档。

是否可以延迟构建服务,直到收到所有文件。

换句话说,我们如何确保在构造函数时像这样注入服务:

constructor(service:Service)

服务启动的所有异步操作都已完成,所有文档都可用?

我认为这是一种反模式,我们应该使用 RxJS,但我想我会检查一下。

【问题讨论】:

  • 如果您必须在其他任何事情之前拥有数据(例如应用程序广泛依赖的远程加载配置),您可以使用 APP_INTIALIZER,但如果它可以等待,只需使用 rxjs 和主题等等
  • 是的,我想我可能只会使用主题。我可以在Promise.all 完成时发出数据。
  • 如果您使用的是 http 客户端,您可能应该使用 forkJoin 而不是转换为 Promise

标签: javascript angular typescript http fetch


【解决方案1】:

也许你可以使用注射器。 constructor(private injector: Injector)

一旦你的文件可用,

if(document){ this.serviceInstance = this.injector.get(Service) // complete other operations in this block }

SO link

【讨论】:

    猜你喜欢
    • 2011-08-16
    • 2015-09-15
    • 2015-04-05
    • 1970-01-01
    • 2023-03-25
    • 2018-08-20
    • 1970-01-01
    • 2023-03-16
    • 2021-12-26
    相关资源
    最近更新 更多