Angular Promise无效

时间:2016-03-27 18:26:16

标签: javascript angularjs asynchronous promise angular-promise

我尝试在用户发出的每个请求中获得一些重要的内容,例如:companyid,employeeid等。所以这必须在之前收到其他所有内容。

之后,用户会根据每次请求(get/company/{companyid})设置的公司ID来接收信息。

我遇到的问题是接收companyid的响应需要很长且有角度已经尝试向(get/company/{companyid})发出请求,显然还没有companyid

我已经尝试解决这个承诺,但它无效。

在这里,我尝试接收有关用户的一些重要信息(我对每个请求都这样做):

服务

(function () {
    angular.module('employeeApp')
        .service('authenticationservice', authenticationservice);

    function authenticationservice($http,$location,authenticationFactory,$q,GLOBALS,$cookies) {

        this.validateUser = function () {
            var vm = this;
            vm.deferred = $q.defer();

            data = {"api_token": api_token};

            return $http.post(GLOBALS.url+'show/employee/' + $cookies.get('employeeid'),data)
                .success(function(response)
                {
                    vm.deferred.resolve(response);
                })
                .error(function(err,response)
                {
                    vm.deferred.reject(err);
                });

            return vm.deferred.promise;
        }
    }
})();

路由文件 (在我的路线文件中,我使用authenticationservice设置所有重要的用户变量。)

employeeAppModule.run([
        'authenticationservice',
        'constants',
        function(authenticationservice,constants) {
            authenticationservice.validateUser()
                .then(function(response)
                {
                    constants.companyid = response.result.Employee;
                    constants.role = response.result.Role;
                    constants.name = response.result.FirstName;
                    console.log('test');
                },
                function(response){
                    console.log('error');
                });

        }
    ]);

所以问题是用户信息被设置为迟到并且角度已经到我的homeController,在那里他使用尚未设置的companyId。

三江源

2 个答案:

答案 0 :(得分:1)

当前代码中的问题Enter a number: 43 281 return $http.post方法中有两个return语句。在返回validateUser&之前返回$http.get为什么自定义创建的承诺不会从您的方法返回。虽然从return vm.deferred.promise;删除第一个return会解决您的问题,但我不建议您去修复此问题,因为它被认为是一种糟糕的模式。

相反,我会说,你应该通过$http.get方法使用承诺回报,&使用$http将数据返回到链承诺机制。

<强>代码

.then

答案 1 :(得分:0)

要确保$ http返回$ promise对象,您需要检查控制器中的操作是否返回值并且它不是无效操作。