У меня есть ConfigService, который получает информацию из настроек приложения. json в приложении SPA.
Что он делает:
@Injectable()
export class ConfigService {
private config: Config = {} as Config;
constructor(private http: HttpClient,
private logger: NGXLogger) {
}
loadConfigSettings(): Promise<void> {
return this.http
.get<Config>('/appsettings.json')
.toPromise()
.then(data => {
this.config = data;
this.configureLogging();
});
}
В app.module.ts Я регистрирую это как:
imports: [
BrowserModule,
AppRoutes,
...
HealthModule,
LoggerModule.forRoot(null)
],
А для провайдеров:
providers : [
{
provide: APP_INITIALIZER,
multi: true,
deps: [ConfigService],
useFactory: (configService: ConfigService) => {
return () => {
return configService.loadConfigSettings();
};
}
},
{
provide: HTTP_INTERCEPTORS,
useClass: TokenInterceptorService,
deps: [ConfigService],
multi: true,
}
],
Я заметил, что вызов к серверу ConfigService выполняется несколько раз, фактически в любое время, когда значение конфигурации
Если я пытаюсь использовать Observable в loadConfigSettings и вызываю его только тогда, когда this.config пуст, значение недоступно при запуске HTTP_INTERCEPTOR.
Чего мне не хватает