Angular Precedence中的App_initalizer和GlobalErrorHandler

时间:2017-11-13 08:51:57

标签: javascript angular

在我的角度应用程序中,我正在使用APP_INITALIZER和GlobalERRORHandler。我的全局错误处理程序依赖于处理日志记录的服务。

export function loadConfig(config: ConfigService) => () => config.load()

@NgModule({
    declarations: [AppComponent],
    imports: [BrowserModule,
        routes,
        FormsModule,
        HttpModule],
    providers: [
        ConfigService,
        {
            provide: APP_INITIALIZER,
            useFactory: loadConfig,
            deps: [ConfigService],
            multi: true
        }, 
    ErrorLoggingService,
{
      provide: ErrorHandler,
      useClass: GlobalErrorHandler,
      deps: [ErrorLoggingService]
    }

    ],
    bootstrap: [AppComponent]
})
export class AppModule {
}

但是,我对ErrorLoggingService的实现还依赖于由角度DI注入的configService实现。

    @Injectable()
    export class ErrorLoggingService {
      _errorLogAPIUrl: string;
      seen = [];

      constructor(private http: HttpClient, private config: ConfigService) {
        config.load().then(e => (this._errorLogAPIUrl = config.errorLoggingUrl));
      }

      logClientError(error: Error): Observable<any> {

        const convertedObservable = this.http.post<any>(
          error
        );
        convertedObservable.subscribe(e => {});
        return convertedObservable;
      }
}

我的globalerrorhandler实现的定义如下。

@Injectable()
export class GlobalErrorHandler extends ErrorHandler {
  constructor(
    private _errorLogService: ErrorLoggingService
  ) {
    super(true);
  }

  handleError(error: any): void {
    this._errorLogService.logClientError(error);
    throw error;
  }

}

但是,由于ErrorHandler代码在APP_INITIALIZER运行之前运行,这意味着我没有在errorLogservice中使用配置,因此我遇到了问题,其中发生了错误且某些服务尚未连接。

有没有办法在角度内处理这样的场景。因此,在APP_INITALIZER加载之前,我有启动时的配置和服务。

我已经尝试过这个stackoverflow(Angular: APP_INITIALIZER with GlobalErrorHandler)的答案,但它打破了很多其他的东西,比如e2e和angular cli命令。

0 个答案:

没有答案