【问题标题】:AngularJS 10 $digest() iterations reached. AbortingAngularJS 达到 10 $digest() 迭代。中止
【发布时间】:2025-05-31 20:45:02
【问题描述】:

我正在使用 angular 1.4 来调用 REST API,但我得到了

AngularJS 达到了 10 次 $digest() 迭代。中止

这是我的 services.js

(function (angular) {
'use strict';

angular.module('myApp.services.dashboard', [])
        .factory('DashboardService', DashboardService);

DashboardService.$inject = ['$http', '$q', 'EndpointUrl'];

function DashboardService($http, $q, EndpointUrl) {
    function getStatus() {
        var deferred = $q.defer();

        return $http.get(EndpointUrl + 'status')
                .then(successRequest, failRequest);

        function successRequest(data) {
            deferred.resolve(data.data);
            return deferred.promise;
        }
        ;

        function failRequest() {
            deferred.reject([]);
            return deferred.promise;
        }
        ;
    };
};

})(angular);

这是我的 app.js

.config(function ($stateProvider, $urlRouterProvider, $httpProvider, $locationProvider, $compileProvider) {
                $locationProvider.html5Mode(false).hashPrefix('!');
                $compileProvider.debugInfoEnabled(false);

                $stateProvider
                        .state('dashboard', {
                            controller: 'DashboardController as dashboard',
                            url: '/app/dashboard',
                            templateUrl: '/assets/js/src/dashboard/templates/dashboard.html',
                            resolve: {
                                getStatus: function (DashboardService) {
                                    return DashboardService.getStatus();
                                }
                            }
                        });

                $urlRouterProvider.otherwise('/app/dashboard');
                $httpProvider.defaults.useXDomain = true;
                delete $httpProvider.defaults.headers.common['X-Requested-With'];
            })

我的 controller.js 没有执行任何操作:

(function (angular) {
    'use strict';
    angular.module('myApp.controllers.dashboard', [])
            .controller('DashboardController', DashboardController);
    DashboardController.$inject = ['$rootScope', '$state', '$filter', 'DashboardService', 'DashboardPeriods', 'getStatus'];
    function DashboardController($rootScope, $state, $filter, DashboardService, DashboardPeriods, getStatus) {

    }
    ;

})(angular);

所以我真的不明白为什么要达到 $digest() 迭代。
REST API 每次只返回一个相同的 json。

【问题讨论】:

标签: javascript angularjs


【解决方案1】:

您正在返回 $http Promise,然后从您的回调中返回 deferred.promise,这可能会导致循环。删除 $http 返回。将 deferred.promise return 从回调方法中移出并从 getStatus 方法中返回。

function DashboardService($http, $q, EndpointUrl) {
    function getStatus() {
        var deferred = $q.defer();

        $http.get(EndpointUrl + 'status')
                .then(successRequest, failRequest);

        function successRequest(data) {
            deferred.resolve(data.data);
        };

        function failRequest() {
            deferred.reject([]);
        };

        return deferred.promise;
    };
    return {'getStatus': getStatus};
};

【讨论】:

  • 是的,但如前所述,我仍然遇到同样的错误。
  • 你去掉$http前面的return了吗?
  • 是的,我删除了返回。
  • 我注意到您从未从工厂返回包含您的方法的对象。这就是为什么 Angular 无法解决它。查看最新编辑。
  • 我猜问题出在其他地方。是这样的吗github.com/angular-ui/ui-router/issues/1022