我有一个Rest调用,它会在一切正常时向控制器返回响应,如果异常,它必须返回一个默认值。
$http.get(url).then(function(res){
//do some convertion on the res.data if needed
return res;
}).catch(function(error){
//toast the error to the user
return $q.when(/*default value */[]);
});
当我从控制器访问它时,我遇到了问题。
MyService.getData().then(function(response){
//assign the response to the controller variable
vm.data = response.data; //LINE XYZ
});
这里的XYZ
行我将response.data
值赋给控制器变量。问题是,当出现异常时,$q.when()
会返回一个承诺,其中数据直接位于response
而不是正常response.data
。
有没有办法返回与promise
类似的正确$http
?
使用的角度版本:1.6.4
答案 0 :(得分:0)
如果您使用then
函数的第二个参数,您将获得响应。像这样:
return $http.get(url).then(function(res){
//do some convertion on the res.data if needed
return res;
},function(res){
//toast the error to the user
return $q.when(/*default value */[]);
});
这是你要找的吗?否则,如果您只需要控制器中的数据而不需要完整的响应对象,则可以执行以下操作:
return $http.get(url).then(function(res){
//do some convertion on the res.data if needed
return res.data;
},function(res){
//toast the error to the user
return $q.when(/*default value */[]);
});
这样,如果发生异常,您不会遇到getData()
错过data
- 属性的结果。