Angular: получить конфигурацию в SPA только один раз и до запуска перехватчика HTTP - PullRequest
0 голосов
/ 24 марта 2020

У меня есть 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.

Чего мне не хватает

...