访问Angular承诺的响应数据

时间:2017-07-20 11:23:54

标签: angularjs angular-promise

我有一个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

1 个答案:

答案 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 - 属性的结果。