Я взял некоторый код для регистрации угловых исключений из демонстрации Джона Папы.
Код проблемы находится здесь:
function extendExceptionHandler($delegate, exceptionHandler, logger) {
return function (exception, cause) {
var appErrorPrefix = exceptionHandler.config.appErrorPrefix || '';
var errorData = { exception: exception, cause: cause };
//problem occurs when setting exception.message
exception.message = appErrorPrefix + exception.message;
$delegate(exception, cause);
logger.error(exception.message, errorData);
};
}
Когда я устанавливаю точку останова в отладчике, я вижу, что значение exception.message
имеет значение
Не удалось установить свойство "authorizationData" в "Storage": значение "authorizationData" превысило квоту ".
Однако строка exception.message = appErrorPrefix + exception.message;
вызывает второе исключение:
Невозможно установить сообщение свойства объекта [Object Object], которое имеет только getter
Это второе сообщение правильно установлено и теперь работает журнал. Итак, почему я не могу установить свойство exception.message
при вызове первого исключения? (он вызывается вызовом $window.localStorage[key] = JSON.stringify(value);
)
Исключение.message, которое бросается в ваш обработчик исключений, похоже, "только для чтения". У меня нет документации, подтверждающей, что это может быть одна из тех вещей, которые каждый-браузер-делает-по-разному, но простой тест заключается в использовании локальной переменной для зарегистрированного сообщения. Поскольку вы только регистрируете и делегируете, это может быть все, что вам нужно.