"10 $digets() итераций достигнуто" при попытке $http.post() из обработчика ошибок ng-translate
Мы используем угловой перевод для локализации веб-сайта, используя наш собственный загрузчик, который получает переводы с сервера. На стороне сервера у нас есть логика, которая обрабатывает отсутствующие ключи перевода, так что мы оба возвращаем что-то (перевод с запасного языка или самого ключа) и сообщаем системе, что ключ был запрошен (так что он отображается в пользовательском интерфейсе перевода). в другом месте на сайте). Сейчас я борюсь за создание чего-то похожего на стороне клиента.
$translateProvider
есть метод useMissingTranslationHandler(factory)
который мы успешно настроили, чтобы просто выйти из системы, если в консоли отсутствует ключ, используя следующее:
app.config(function ($translateProvider) {
$translateProvider.useMissingTranslationHandler('translationMissingHandler');
});
app.factory('translationMissingHandler', translationMissingHandler);
translationMissingHandler.$inject = ['$window', '$log', '$http'];
function translationMissingHandler($window, $log, $http) {
return function (translationId) {
var culture = $window.preferredCulture, // workaround for another problem
errorInfo = {
key: translationId,
culture: culture
};
$log.warning('Translation missing:', errorInfo);
// $http.post('/api/v2/localization/missing', errorInfo);
}
}
Однако тогда я раскомментирую POST
на сервер, уведомляющий о пропущенном ключе, страница висит на строке 14394 angular.js
- throw e
, где e.message
является
[$rootScope:infdig] Достигнуто 10 итераций $digest(). Aborting! Наблюдатели уволены за последние 5 итераций: []
Я пробовал разные вещи, чтобы обойти это - например, завершение вызова $http.post()
в $timeout
или же $rootScope.$apply
но безрезультатно; Я все еще получаю то же сообщение об ошибке.
Есть ли способ запланировать звонок $http.post()
отсюда, не вызывая эту ошибку? Если так, то как?