提问人:rolinger 提问时间:6/25/2021 更新时间:6/27/2021 访问量:37
Angularjs 如何对$http调用进行正确的错误处理?
Angularjs how to do proper error handling for $http call?
问:
我的控制器为空或数据从服务传回,这反过来又导致控制器中出现错误,因为无法处理结果。我正在重读有关错误处理的材料,并开始怀疑我的错误处理是否不完整。由于我的控制器正在获取响应,但响应为空/未定义,这意味着我的服务仍在传回错误的响应。但根据我的服务,我认为应该用 .如何解决此问题,以便我的服务正在处理错误并仅将正确的数据传回控制器?undefined
undefined
catch
控制器:
.controller('listCtrl', function($scope,listService) {
listService.getList(1)
.then(function(res) {
if (res.list!= null) { // <--- `Exception: Cannot read property 'list' of undefined`
...
...
} else {
...
...
}
}) ;
服务:
.factory("listService", function($http,$q) {
// errMgmt 5100
var headers={} ;
var listMain = [] ; // Current Lists
var listPast = [] ; // Past Lists
function setVars() {
baseUrl = "https://api.mydomain.com/v1/index.php" ;
headers = {
'Pragma':'no-cache',
'Expires': -1,
'Cache-Control':'no-cache,no-store,must-revalidate',
'Content-Type' : 'application/json',
'X-Requested-With':'com.mydomain',
Authorization: 'Token ' +clientToken
} ;
}
function getList(typeID) {
if (typeID == 1) {
listMain = [] ;
} else if (typeID == 2) {
listPast = [] ;
}
setVars() ;
var dataObj = [{"type":typeID,"userID":userData.user_ID}] ;
var req = {
method: 'POST',
url: baseUrl,
timeout:httpTimeout,
headers: headers,
data: JSON.stringify(dataObj)
}
return $http(req)
.then(function(response){
if (typeID == 1) {
listMain = response.data[0] ; <-- Error happening, but being processed in success
return listMain ;
} else if (typeID == 2) {
listPast = response.data[0] ;
return listPast ;
}
}).catch(function(err) {
var msg = setError(err) ;
errMgmt("services/getList",5100,msg) ;
});
}
return {
getList: function(typeID) { // typeID : 1=current lsit, 2=past list
return getList(typeID) ;
}
})
我读过各种各样的东西,但引起我注意的是,我的服务可能需要定义为:
return $http(req) {
.then(function(success) {
// success response
},function(error1) {
// error response
}).catch(error2) {
// catch all
}) ;
如果是这种情况,那么与每个过程之间到底有什么区别 - 每个过程具体是什么?function(error1)
.catch(error2)
答:
0赞
Thomson Mixab
6/27/2021
#1
尝试使用 success() 和 error() 调用$http
.factory("listService", function($http,$q) {
// errMgmt 5100
var headers={} ;
var listMain = [] ; // Current Lists
var listPast = [] ; // Past Lists
function setVars() {
baseUrl = "https://api.mydomain.com/v1/index.php" ;
headers = {
'Pragma':'no-cache',
'Expires': -1,
'Cache-Control':'no-cache,no-store,must-revalidate',
'Content-Type' : 'application/json',
'X-Requested-With':'com.mydomain',
Authorization: 'Token ' +clientToken
} ;
}
function getList(typeID)
{
if (typeID == 1) {
listMain = [] ;
} else if (typeID == 2) {
listPast = [] ;
}
setVars() ;
var dataObj = [{"type":typeID,"userID":userData.user_ID}] ;
var req = {
method: 'POST',
url: baseUrl,
timeout:httpTimeout,
headers: headers,
data: JSON.stringify(dataObj)
}
$http(req).success(function(data, status)
{
if (status == 200)
{
alert(data);
if (typeID == 1) {
listMain = data ;
return listMain ;
} else if (typeID == 2) {
listPast = data;
return listPast ;
}
}
}).error(function(data)
{
alert(data);
});
}
return {
getList: function(typeID) { // typeID : 1=current lsit, 2=past list
return getList(typeID) ;
}
})
评论