APP_INITIALIZER阻止在错误时加载应用

时间:2018-12-13 08:48:52

标签: angular error-handling promise initializer

我在“订阅”和随附的Promise中发现了错误。

    @Injectable()
    export class CountryListResolver {

        public countryList: Locale[];

        constructor(private portareServices: PortareServices) { }

        load() {
            return new Promise((resolve, reject) => {
                this.portareServices.getCountryList().subscribe((data) => {
                    this.countryList = data;
                    resolve(true);
                },
                error => {
                    console.log('CountryListResolver', error);
                },
                () => {
                    // No errors, route to new page
                });
            }).catch((err: any) => Promise.resolve());
        }
    }

现在的事情是,当我取消对从服务中实际获取数据的功能的评论时,应用程序加载就很好了(显然没有将数据放置在最初应该加载的地方)。

  // this.localesEU = this.portareDataModel.setLocalesEU = this.countryListResolver.countryList;

注释掉load函数后,应用程序加载就很好了。另外,如果服务成功解决,那么一切都将像灵符一样工作。

  providers: [
      CountryListResolver, { provide: APP_INITIALIZER, useFactory: countryListProviderFactory, deps: [CountryListResolver], multi: true }
  ]

如何处理此问题?

1 个答案:

答案 0 :(得分:1)

this related answer,当APP_INITIALIZER被拒绝时,它就脱离了bootstrapModule返回的承诺:

// main.ts

platformBrowserDynamic().bootstrapModule(AppModule)
.catch(err => { ... fail gracefully });