Чтобы ответить на ваш вопрос $ rootScope. $$ фаза может быть установлен в «нулевой» (строка), что приведет к ошибке броска.
Я не уверен, как вы смогли зафиксировать это сообщение, но Sentry сообщает, что для меня и я получаю тонну этих исключений только от кучки пользователей.
Так что для того, чтобы уменьшить the spam я сделал функцию, которая будет удалить стек из исключения, и очистит $ rootScope $$ фаза, которая, мы надеемся, предотвратить появление второго:.
function exceptionHandler(){
const error = Error;
const nullMessage = "[$rootScope:inprog] null already in progress";
function exception(message){
if(message.indexOf(nullMessage) === 0){
const $rootScope = exceptionHandler.$rootScope;
if($rootScope) $rootScope.$$phase = null;
const exception = new error(nullMessage);
exception.stack = "";
return exception;
}
return new error(message);
}
Error = exception;
}
exceptionHandler(); // If it's not run AngularJS will use the original Error constructor, the one we're decorating
а потом в angular.run впрыснуть $ rootScope и установить его как свойство функции:
angular.run(["$rootScope", function($rootScope){
exceptionHandler.$rootScope = $rootScope;
}]);
Мое предположение заключалось в том, что расширение устанавливало $ rootScope. $$ phase до «null», но после установки тех же расширений, что и один из моих пользователей, исключение не произошло.
Star on GistHub
Для документации по ошибке, посетите https://docs.angularjs.org/error/$rootScope/inprog – georgeawg
я получаю подобную проблему сообщили через наше программное обеспечение мониторинга - единственный способ это происходит, если вы передаете строку, содержащую «null» в качестве аргумента функции. Проблема заключается в том, что beginPhase() вызывается только дважды во всем угловом источнике - и в обоих случаях он принимает «$ apply» или «$ digest». Поэтому, хотя это ключ, я все еще не понимаю, почему это происходит. – Veetek