@@ -158,13 +158,8 @@ function _injectorBindings(appComponentType): List<Type | Binding | List<any>> {
158158 ] ;
159159}
160160
161- export function createNgZone ( handler : ExceptionHandler ) : NgZone {
162- // bootstrapErrorReporter is needed because we cannot use custom exception handler
163- // configured via DI until the root Injector has been created.
164- var bootstrapErrorReporter = ( exception , stackTrace ) => handler . call ( exception , stackTrace ) ;
165- var zone = new NgZone ( { enableLongStackTrace : assertionsEnabled ( ) } ) ;
166- zone . overrideOnErrorHandler ( bootstrapErrorReporter ) ;
167- return zone ;
161+ export function createNgZone ( ) : NgZone {
162+ return new NgZone ( { enableLongStackTrace : assertionsEnabled ( ) } ) ;
168163}
169164
170165/**
@@ -299,16 +294,16 @@ export function commonBootstrap(
299294 BrowserDomAdapter . makeCurrent ( ) ;
300295 wtfInit ( ) ;
301296 var bootstrapProcess = PromiseWrapper . completer ( ) ;
302- var zone = createNgZone ( new ExceptionHandler ( DOM , isDart ? false : true ) ) ;
303- zone . run ( ( ) => {
304- // TODO(rado): prepopulate template cache, so applications with only
305- // index.html and main.js are possible.
297+ var zone = createNgZone ( ) ;
306298
307- var appInjector = _createAppInjector ( appComponentType , componentInjectableBindings , zone ) ;
308- var exceptionHandler = appInjector . get ( ExceptionHandler ) ;
309- zone . overrideOnErrorHandler ( ( e , s ) => exceptionHandler . call ( e , s ) ) ;
299+ zone . run ( ( ) => {
300+ var exceptionHandler ;
310301
311302 try {
303+ var appInjector = _createAppInjector ( appComponentType , componentInjectableBindings , zone ) ;
304+ exceptionHandler = appInjector . get ( ExceptionHandler ) ;
305+ zone . overrideOnErrorHandler ( ( e , s ) => exceptionHandler . call ( e , s ) ) ;
306+
312307 var compRefToken : Promise < any > = appInjector . get ( appComponentRefPromiseToken ) ;
313308 var tick = ( componentRef ) => {
314309 var appChangeDetector = internalView ( componentRef . hostView ) . changeDetector ;
@@ -327,10 +322,17 @@ export function commonBootstrap(
327322 PromiseWrapper . then ( tickResult , null ,
328323 ( err , stackTrace ) => { bootstrapProcess . reject ( err , stackTrace ) ; } ) ;
329324 } catch ( e ) {
325+ if ( isPresent ( exceptionHandler ) ) {
326+ exceptionHandler . call ( e , e . stack ) ;
327+ } else {
328+ // The error happened during the creation of an injector, most likely because of a bug in
329+ // DI.
330+ // We cannot use the provided exception handler, so we default to writing to the DOM.
331+ DOM . logError ( e ) ;
332+ }
330333 bootstrapProcess . reject ( e , e . stack ) ;
331334 }
332335 } ) ;
333-
334336 return bootstrapProcess . promise ;
335337}
336338
0 commit comments