引导期间任何组件中未捕获的异常(注入器或随机错误)都可能导致引导失败。
由于浏览器不兼容,应用程序可能根本无法启动引导过程。
我正在寻找一种方法来通知用户(使用警报,模态等)处理Angular 2应用初始化期间发生的严重错误,因此用户可以确定该应用不仅会永久加载,而且会失败出于某种原因。
在Angular 2中处理此案例的好方法是什么?
答案 0 :(得分:2)
可以通过更改延迟模式来解决此问题。但是,该解决方案基于这样的假设:自举是同步的并且发生在一个滴答中,这可能是错误的。
仍然不确定是否有更好的方法。
class InitDeferred {
promise: Promise<any>;
private fulfilled: boolean;
constructor() {
this.promise = new Promise((resolve, reject) => {
setTimeout(() => this.fulfilled === true ? resolve() : reject('init error'));
});
}
resolve() {
this.fulfilled = true;
}
reject() {
this.fulfilled = false;
}
}
const initDeferred = new InitDeferred;
export default initDeferred;
@Injectable()
export class InitErrorHandler extends ErrorHandler {
handleError(error: any): void {
initDeferred.reject();
super.handleError(error);
}
}
@Component(...)
export class App extends OnInit {
ngOnInit() {
initDeferred.resolve();
}
}
@NgModule({
...
providers: [{ provide: ErrorHandler, useClass: InitErrorHandler }]
})
export class AppModule {}
initDeferred.promise.catch(alert);
platformBrowserDynamic().bootstrapModule(AppModule);
答案 1 :(得分:1)
PlatformRef.bootstrapModule
返回一个承诺,我们可以.catch
错误,同时bootstrap
(初始化)应用。
platformBrowserDynamic().bootstrapModule(<AppName>)
.catch(err => console.error(err));
有一个错误,just resolved(changelog)。感谢@estus,指出它。