我尝试在用户发出的每个请求中获得一些重要的内容,例如: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。
三江源
答案 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对象,您需要检查控制器中的操作是否返回值并且它不是无效操作。