Roberto Huertas
Roberto Huertas Just a humble software developer wandering through cyberspace. Organizer of bcn_rust. Currently working at Datadog.

Never miss an error in Ionic

Never miss an error in Ionic

You may know that Angular provides a hook for centralized exception handling that you may override. The default implementation prints error messages to the console.

It’s usual for developers to override the default implementation by providing their own ErrorHandler. By doing this, they can manage all the exceptions and do something with them (i.e. store them in some database…).

The way to do this is pretty straightforward:

class CustomErrorHandler implements ErrorHandler {
  handleError(error: Error) {
    // do something with the exception
  }
}

@NgModule({
  providers: [{ provide: ErrorHandler, useClass: CustomErrorHandler }],
})
class AppModule {}

Whenever an unhandled exception happens you would expect it to be logged into the console, regardless your custom implementation doesn’t do it explicitly. At least this is what the default Angular implementation provides and, indeed, that’s the way it works. Check it out live in this StackBlitz project.

But… what about Ionic?

In Ionic, in order to provide the same behavior you would tipically extend the IonicErrorHandler:

class CustomErrorHandler extends IonicErrorHandler {
  handleError(error: Error) {
    // do something with the exception
  }
}

@NgModule({
  providers: [{ provide: ErrorHandler, useClass: CustomErrorHandler }],
})
class AppModule {}

So far so good but, unfortunately, if you forget to explicitely call console.error, you won’t see anything in your console. In this case, the default Angular implementation won’t work and you will totally miss the error.

You can take a look at this StackBlitz project and check the console out. You won’t see any errors and the screen will remain empty, because, in this case, the error happens in the constructor of one of the app.component’s depencencies.

tl;dr

If you’re working with Ionic and you override the default IonicErrorHandler, don’t forget to explicitly call console.error in that handler if you want to have some visibility in the console in case some unexpected error happens :wink:.

comments powered by Disqus