В настоящее время я изучаю возможные методы обработки исключений приложений в AngularJS.
Одна из вещей, которую мы действительно хотели избежать, заключалась в том, чтобы обернуть несколько частей приложения во вложенные блоки try/catch, но обрабатывать вещи чисто - i.e бросать исключение в ответ на обещание.
- Кто-нибудь рассматривал этот вопрос раньше и имел какие-либо рекомендации?
- Любые предложения о том, как выбирать исключения в службах, а также контроллеры/директивы. (См. Ниже - широковещание работает нормально, но только если вы можете подключить слушателя к области).
Прогресс до сих пор
Несколько коротких целей дизайна:
- Разрешить исключения из одной части приложения, которые будут обрабатываться в другом месте, или, возможно, в нескольких местах (например, "отображать уведомление об ошибке пользователю", "отключить виджет" ).
- Обеспечьте централизованное управление общими условиями ошибки - то есть зайдите на сервер, отобразите уведомление пользователю, переадресовывайте логин.
- Разрешить исключения из контроллеров, директив, служб и т.д.
- В конечном итоге разрешить локализованные сообщения.
Текущая склонность моей команды состоит в том, чтобы написать службу для обработки исключений, которая вывела бы ряд простых вызовов:
exceptionService.warn('exception_token');
exceptionService.crit('another_exception_token');
Затем эта служба будет форматировать объект "исключение" и транслировать это из корнеплода. Это позволит обработчику по умолчанию отслеживать любые широковещательные передачи и применять действия по умолчанию, а также настраивать пользовательские слушатели в других областях, которые могут обрабатывать более конкретные условия - то есть отключить часть пользовательского интерфейса.
var exception = {
token: 'exception_token',
severity': 'crit'
};
// broadcast exception
$rootScope.$broadcast(
'application_exception',
exception
);