Инструменты пользователя

Инструменты сайта


angular:angularjs:servisy:exception

Сервис для обработки ошибок

Как известно для обработки ошибок в JavaScript существует конструкция try{} catch{} все ошибки которые возникают вне этой секции попадают в категорию unhandled и для их обработки AngularJS предоставляет сервис $exceptionHandler основной функцией которого является логирование информации об ошибке в консоль.

для обработки ошибок следует использовать $exceptionHandler сервис, он работает только с теми ошибками которые не обрабатываются(например в конструкции try catch)

<!DOCTYPE html>
<html ng-app="studyModule">
<head>
    <title></title>
    <script src="../angular.min%20.js"></script>
    <link href="../bootstrap-theme.css" rel="stylesheet" />
    <link href="../bootstrap.css" rel="stylesheet" />
    <script>
        angular.module("studyModule", [])
        .controller("studyCtrl", function ($scope, $exceptionHandler) {            
            $scope.throwEx = function () {
                try {
                    throw new Error("Triggered Exception");
                } catch (ex) {
                    $exceptionHandler(ex.message, "Button Click");
                }
            }
        });
    </script>
</head>
<body ng-controller="studyCtrl">
    <div class="panel panel-default">
        <div class="panel-body">
            <button class="btn btn-primary" ng-click="throwEx()">Throw Exception</button>
        </div>
    </div>
</body>
</html>

здесь переопределяется стандартный сервис для обработки ошибок, в данном случае изменяется формат отображения ошибки, но переопределять сервис для обработки ошибок плохая практика так как если он не будет корректно работать то это значительно усложнит работу

<!DOCTYPE html>
<html ng-app="studyModule">
<head>
    <title></title>
    <script src="../angular.min%20.js"></script>
    <link href="../bootstrap-theme.css" rel="stylesheet" />
    <link href="../bootstrap.css" rel="stylesheet" />
    <script>
        angular.module("studyModule", [])
        .controller("studyCtrl", function ($scope, $exceptionHandler) {
            $scope.throwEx = function () {
                try {
                    throw new Error("Triggered Exception");
                } catch (ex) {
                    $exceptionHandler(ex.message, "Button Click");
                }
            }
        })
        .factory("$exceptionHandler", function ($log) {
            return function (exception, cause) {
                $log.error("Message: " + exception.message + " (Cause: " + cause + ")");
                //здесь переопределяется стандартный сервис для обработки ошибок, в данном случае изменяется формат отображения ошибки,
                //но переопределять сервис для обработки ошибок плохая практика так как если он не будет корректно работать то это значительно
                //усложнит работу
            }
        });
    </script>
</head>
<body ng-controller="studyCtrl">
    <div class="panel panel-default">
        <div class="panel-body">
            <button class="btn btn-primary" ng-click="throwEx()">Throw Exception</button>
        </div>
    </div>
</body>
</html>
angular/angularjs/servisy/exception.txt · Последние изменения: 2023/01/12 12:18 (внешнее изменение)