如何在服务失败时解决状态

时间:2016-05-06 10:28:01

标签: javascript angularjs promise

感谢您阅读此问题。 我正在制作AngularJS应用程序。 我创建了一个状态并定义了调用用户服务中定义的User.getProfile的解析。 因此,当服务成功获取配置文件但在失败时无法正常工作时,此解析正在运行。 让我发一个代码。

    .state('app.profile', {
        url: '/profile',
        views: {
            'menuContent': {
                templateUrl: 'views/pages/profile.html',
                controller: 'ProfileCtrl',
            }
        },
        resolve: {
            data: function(User) {
                return User.getProfile();
            }
        }
    })

这是我定义的服务。

service.getProfile = function() {
        var deferred = $q.defer();

        HttpReq.sendRequest( RESTAPI.DEV_URL + RESTAPI.PROFILE,
            'GET',
            undefined,
            function(result) {
                /*

                */
                if (result.success) {
                    deferred.resolve(result);
                }
                else {
                    deferred.reject(result);

                }

            },
            function(error, response) {
                deferred.reject(error);

                //uiHelper.alert($scope, 'Login Error', response.message);
        });

        return deferred.promise;
    };

在服务中调用defer.resolve时解析了app.profile。 但是在调用defer.reject时没有解决。 如果我在承诺电话中遇到问题,请纠正我。

谢谢!

1 个答案:

答案 0 :(得分:2)

如果解析功能失败,您可能希望相应地向用户显示某些内容(如错误消息)。让你的resolve函数返回一个promise(没有那个)并使用内部事件$ routeChangeError会更好。

 myApp.run(['$rootScope',function($rootScope) {
  $rootScope.$on('$routeChangeError', function() {
    // what you want to do if an error occurs 
    // ex: $rootScope.displayErrorMessage = true
  });
}]);