Global Error Handler

#1

Hi,
I’m trying to implement a global ErrorHandler but it gets called randomly, sometimes it goes ok but others an “Uncaught HttpErrorResponse {headers: HttpHeaders, status: 401…” is shown in the console (fired from polyfills.js:3) and the error never reaches the ErrorHandler.

Any idea of what is going on?

Thanks!

This is the ErrorHandler:

import { HttpErrorResponse } from ‘@angular/common/http’;
import { ErrorHandler, Injectable, Injector } from ‘@angular/core’;
import { App, IonicErrorHandler, NavController, ToastController } from ‘ionic-angular’;
import { LoginPage } from ‘…/…/…/features/login/login’;

@Injectable()
export class ErrorsHandler extends IonicErrorHandler implements ErrorHandler {
constructor(
private injector: Injector,
protected app: App,
private toastCtrl: ToastController,
) {
super();
}

handleError(error: Error | HttpErrorResponse) {
const navCtrl: NavController = this.app.getRootNav();
// If the error is IPromiseError, the error is inside rejection
if (error[‘rejection’]) { error = error[‘rejection’]; };

if (!navigator.onLine) {
  // No Internet connection
  // Handle offline error
  let toast = this.toastCtrl.create({
    message: `SIN CONEXIÓN A INTERNET`,
    duration: 10000,
    position: 'top',
    cssClass: 'warn-toast',
    showCloseButton: true,
    closeButtonText: 'cerrar',
  });

  toast.present();
}

if (error instanceof HttpErrorResponse) {
  // Server or connection error happened
  if (!navigator.onLine) {
    // Handle offline error
    let toast = this.toastCtrl.create({
      message: `SIN CONEXIÓN A INTERNET`,
      duration: 10000,
      position: 'top',
      cssClass: 'warn-toast',
      showCloseButton: true,
      closeButtonText: 'cerrar',
    });

    toast.present();
  } else {
    // Handle Http Error (error.status === 403, 404...)
    if (error.status === 401) {
      // And show notification to the user
      let toast = this.toastCtrl.create({
        message: `USUARIO NO AUTENTICADO ${error.status}. POR FAVOR, INTRODUZCA USUARIO Y CONTRASEÑA.`,
        duration: 10000,
        position: 'top',
        cssClass: 'warn-toast',
        showCloseButton: true,
        closeButtonText: 'cerrar',
      });

      toast.present();

      navCtrl.setRoot(LoginPage);
    } else {
      let toast = this.toastCtrl.create({
        message: `SE PRODUJO UN ERROR: ${error.status}. DISCULPE LAS MOLESTIAS.`,
        duration: 10000,
        position: 'top',
        cssClass: 'error-toast',
        showCloseButton: true,
        closeButtonText: 'cerrar',
      });

      toast.present();
    }
  }
}

// Log the error anyway
console.error(error);

}
}