我已经在angularJS中创建了一个处理get和post请求的服务,但问题是在我的控制器中我无法捕获错误回调但成功回调工作正常:
app.js
AuthenticationService.Login(function (_data) {
$rootScope.showPreloader = false;
console.log(_data)//works fine when call is succes
},function (error){
console.log(error)//not executed when error is thrown
});
authentication.service.js
function Login(callback) {
$http({
method: "GET",
url: "/auth/getRoles",
headers: {
"Accept-Language": "en-US, en;q=0.8",
"Content-Type": "application/json;charset=UTF-8"
}
}).then(function (_response) {
return _response.data;
var serverData = response.data;
callback(serverData);//getting respone is controller when succes
}, _handleError);
};
function _handleError(_error) {
console.log(_error)//console prints on error
return _error//controller never recevies the return statement
};
问题出现在 handleError 函数中,该函数永远不会将错误返回给控制器,任何帮助都将大大适用
答案 0 :(得分:2)
您所要做的就是在Login方法中返回承诺
function Login(callback) {
return $http(...success / error callback);
};
这种方式调用此方法返回一个承诺,您可以使用" .then"上。
编辑:看起来你真的错过了这里的承诺点。
您可以如上所述定义方法,然后在某个控制器中调用它,就像它是一个承诺一样。
$scope.login = function() {
LoginService.Login()
.then(function(response){
$scope.loginData = response
}, function(err) {
//Error handling...
});
};
这样做的好处是,您现在可以进行任何必要的预处理来操作LoginService中的数据,然后只要您注入登录服务,就可以在任何控制器中调用它作为承诺。 / p>