Angular 页面重新加载后,APP\ U初始值设定项未定义的结果

Angular 页面重新加载后,APP\ U初始值设定项未定义的结果,angular,typescript,Angular,Typescript,我有一个简单的配置服务,我在APP.shared.module.ts中连接了APP_初始化器令牌: ConfigService, { provide: APP_INITIALIZER, useFactory: (configService: ConfigService) => () => configService.getStuff(), deps: [Confi

我有一个简单的配置服务,我在APP.shared.module.ts中连接了APP_初始化器令牌:

 ConfigService,
        {
            provide: APP_INITIALIZER,
            useFactory: (configService: ConfigService) =>
                () => configService.getStuff(),
            deps: [ConfigService],
            multi: true
        },
这将执行订阅(config.service.ts):

当我转到主页并从那里刷新应用程序时,一切正常。 调用逻辑并返回数据。 但是,当我刷新使用组件并调用构造函数的特定页面时,数据返回似乎很晚,因此我在这里得到未定义的返回:

this.settings = this.configService.settings;
我猜“连线”是错误的

有什么建议可以解决吗?

要让Angular等待您的自定义
应用程序初始值设定项完成,它必须返回一个
承诺。您的
getStuff
方法没有返回任何内容,这意味着Angular不会等待
此.settings
设置

您可以使用将您的
可观察
转换为
承诺
。以下是一个基本示例:

getStuff(): Promise<void> {
    return this.getSettings()
        .toPromise()
        .then(data => {
            this.settings = data;
        });
}
getStuff():承诺{
返回此参数。getSettings()
.toPromise()
。然后(数据=>{
此参数设置=数据;
});
}

我相信你在跟踪。他忽略提到的一个警告是,即使有了这个建议,您仍然有义务为每个环境编译index.html,其唯一目的是更改每个环境的
。确保您没有白白实现它。@Stavm是的,我会按环境编译。回到我最初的问题——坦率地说,我对(1)这种实现和(2)我在这里没有选择和(3)承诺在这里产生如此大的影响和(4)我不能依赖通常的页面生命周期感到恼火。这很烦人。
this.settings = this.configService.settings;
getStuff(): Promise<void> {
    return this.getSettings()
        .toPromise()
        .then(data => {
            this.settings = data;
        });
}