2016-11-15 1 views
5

Я пытаюсь создать централизованную обработку исключений (для всего кода, а не только наблюдаемых) в Angular 2, так что если есть необработанная ошибка, это не сработает приложение, но запишет его. В настоящий момент мое приложение становится невосприимчивым, когда есть необработанное исключение, и я должен его перезагрузить. Я создал ErrorHandler следующим образом:Как создать централизованную обработку исключений в Angular 2 для восстановления из необработанных исключений

import { NgModule, ErrorHandler } from '@angular/core'; 

export class AppErrorHandler implements ErrorHandler 
{ 
    rethrowError = false; 

    handleError(error: any) 
    { 

    } 
} 

Необработанные ошибки действительно идут в HandleError, но, как представляется, вызваны повторно, как мое приложение перестает работать. Пожалуйста помоги.

+0

Если вы реализуете ErrorHandler, вам нужно переопределить/реализовать функцию 'call', которая может быть чем-то вроде' call (error, stackTrace = null, reason = null) '. Также проверьте часть поставщика в моем ответе. – bhantol

+0

Привет, бхантол, спасибо за ваш ответ. У меня уже был раздел обеспечения, который вы показали ниже. Ошибки успешно попадают в функцию handleError. Проблема в том, что она по-прежнему нарушает мое приложение. Я хотел бы, чтобы ошибка регистрировалась и продолжалась, если это было возможно. – LanceM

+0

Возможно, вы захотите описать сценарий, определяя, что вы имеете в виду при аварии. Что происходит с «крахом», и то, что вы не хотите, - это то, что поможет дальше. – bhantol

ответ

4

bhantol спасибо за ваше время и помощь, я действительно ценю это. Мой вопрос был похож на этот пост Angular2: Application crashes/ becomes unresponsive after encountering an exception/ error

Я думаю, что ответ заключается в том, что нет способа восстановить из необработанного исключения, кроме перезагрузки страницы/приложения. Как заявил Гюнтер Цохбауэр: «Обычно исключение следует рассматривать как можно ближе к делу, когда есть способ выздороветь».

Я отредактировал исходное сообщение, чтобы сделать проблему более понятной.

1

Используйте provide, чтобы получить обработчик исключений.

providers: [{provide: ErrorHandler, useClass: AppErrorHandler}]

Смежные вопросы