我尝试在用户提出的每个请求中获取一些重要的信息,例如:companyid、employeeid 等。因此,必须在其他所有事情完成之前收到此信息。
之后,用户会收到基于他在每个请求中设置的 companyid 的信息 (get/company/{companyid}
)。
我遇到的问题是,接收companyid的响应需要很长的时间,并且 Angular 已经尝试向(get/company/{companyid}
)发出请求,显然没有companyid
还没有。
我试图修复这个 promise ,但它不起作用。
在这里,我尝试接收有关用户的一些重要信息(我对每个请求都这样做):
服务
(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。
谢谢
最佳答案
当前代码中的问题是 return $http.post
在 validateUser
方法中有两个 return 语句。在返回 return vm.deferred.promise;
之前返回 $http.get
,这就是为什么自定义创建的 Promise 不会从您的方法返回。虽然通过从 $http.get
中删除第一个 return
可以解决您的问题,但我不建议进行此类修复,因为它被认为是不好的实现模式。
我想说,你应该利用 $http
方法返回 Promise,并使用 .then
将数据返回到链式 Promise 机制。
代码
function authenticationservice($http, $location, authenticationFactory, $q, GLOBALS, $cookies) {
this.validateUser = function() {
var vm = this;
data = {
"api_token": api_token
};
return $http.post(GLOBALS.url + 'show/employee/' + $cookies.get('employeeid'), data)
.then(function(response) {
var data = response.data;
retrun data;
}, function(err) {
return $q.reject(err);
});
}
}
关于javascript - Angular promise 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36250976/