Как отлаживать infdig с пустым массивом в одностраничном приложении angular?

У меня есть одностраничное приложение, над которым я работаю с несколькими сотрудниками больше года. Это приложение angular, которое использует angular -ui-router для перемещения между страницами. Иногда при первом посещении страницы настроек генерируется следующее исключение:

Error: [$rootScope:infdig] 10 $digest() iterations reached. Aborting!
Watchers fired in the last 5 iterations: []
http://errors.angularjs.org/1.3.3/$rootScope/infdig?p0=10&p1=%5B%5D
    at REGEX_STRING_REGEXP (angular.js:63)
    at Scope.$get.Scope.$digest (angular.js:14084)
    at Scope.$get.Scope.$apply (angular.js:14308)
    at done (angular.js:9532)
    at completeRequest (angular.js:9717)
    at XMLHttpRequest.requestLoaded (angular.js:9660)

Я понимаю [$ rootScope: infdig] в нормальном случае, но тот факт, что массив наблюдателей пуст, очень смущает меня. Кроме того, было очень сложно отлаживать, потому что это случается только иногда. Используя инспектор, я смог определить, что завершающийся запрос - это загрузка файла настроек HTML. Удаление различных контроллеров со страницы настроек не облегчает проблему, похоже, происходит даже при загрузке немой "оболочки" версии страницы настроек с загруженными только обычными загружаемыми виджетами.

Как я могу узнать, что вызывает это пустое исключение infdig? Как я могу предотвратить это?

Ответ 1

Я бы поставил это в комментарии, но пока у меня недостаточно репутации.

У меня была эта проблема с использованием ui-router. В моем случае проблема заключалась в логике авторизации внутри $rootScope.$on('$stateChangeStart'), которая пинала его в бесконечный цикл. Что я сделал, чтобы выяснить мою проблему, были установлены точки останова в Chrome во всех областях кода в моем модуле .run/config, где он перенаправлялся с помощью $state.go. Я смог пройти через логику и посмотреть, где начинается бесконечный цикл.