【发布时间】:2016-03-28 03:12:42
【问题描述】:
我尝试在用户提出的每个请求中获取一些重要的信息,例如:companyid,employeeid 等。因此,这必须在其他一切完成之前收到。
之后,用户会收到基于他在每个请求中设置的 companyid 的信息 (get/company/{companyid})。
我遇到的问题是接收 companyid 的响应需要很长时间并且角度已经尝试向 (get/company/{companyid}) 发出请求,显然还没有 companyid。
我已经尝试修复这个 whit 承诺,但它不起作用。
在这里我尝试接收有关用户的一些重要信息(我对每个请求都这样做):
服务
(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');
});
}
]);
所以问题是用户信息设置为延迟,并且 angular 已经进入我的 homeController,他使用尚未设置的 companyId。
谢谢
【问题讨论】:
-
$http已经返回了一个你可以简单地返回的承诺。为什么要尝试将其包装在$q中? -
.success已弃用。请参阅文档docs.angularjs.org/api/ng/service/$http#deprecation-notice -
返回前需要先解析promise:vm.deferred.resolve();
标签: javascript angularjs asynchronous promise angular-promise