从休息调用中捕获错误/读取状态代码 - angular

时间:2015-08-14 21:16:32

标签: angularjs angular-promise angularjs-resource

在以这些格式之一进行休息呼叫时,如何捕获错误/读取http状态代码,两者都可以返回成功的响应,只是不知道如何获取我需要的信息。我可以根据需要获取返回值的对象,我只是无法获取http状态代码。

@Claies在回答此问题(Get data from $resource response in angular factory

时提供的方法
$scope.makeRestCall= function () {
    $scope.member = Item.makeRestCallWithHeaders('123456789', '789456123')
    .query().$promise.then(function(response){

    });
};


 $scope.makeRestCall= function () {
    $scope.member = Item.makeRestCallWithHeaders('123456789', '789456123')
    .query({}, function() {

    })
};

我试图在这里使用第一种方法并从function(response)中抓取一些内容,例如response.status,但它返回undefined。

供参考,使用此工厂:

.factory("Item", function($resource) {
    var endpoint = "http://some valid url";

    function makeRestCallWithHeaders(id1, id2) {
        return $resource(endpoint, null, {
            query: {
                method: 'GET',
                headers: {
                    'id1': id1,
                    'id2': id2
                }
            }
        })
    }

    var item = {
        makeRestCallWithHeaders: makeRestCallWithHeaders
    }

    return item ;
})

项目返回如下内容:

{firstName:Joe, lastName:smith}

我真的只想弄清楚如何访问REST调用返回的状态代码。绝对最终目标是读取任何错误响应并将错误返回到以角度写入的UI。如果有一种方法可以在UI中读取它,那也可以。

1 个答案:

答案 0 :(得分:1)

要阅读错误状态,您需要传递errorCallback to the $promise

$scope.makeRestCall= function () {
$scope.member = Item.makeRestCallWithHeaders('123456789', '789456123')
    .query().$promise.then(
        function(response){
            //this is the successCallback
            //response.status & response.statusText do not exist here by default 
            //because you don't really need them - the call succeeded
            //see rest of answer below if you really need to do this
            //    but be sure you really do...
        },
        function(repsonse) {
            //this is the errorCallback
            //response.status === code
            //response.statusText === status text!
            //so to get the status code you could do this:
            var statusCode = response.status;
        }
    );
};

您不应该在successCallback中需要状态,因为它是成功的,并且您隐含地知道成功代码。

因此,默认情况下,successCallback中的状态不可用。

如果由于某种原因,您确实需要successCallback中的状态,您可以编写interceptor将此信息放在某处,但请注意角度框架在不同的成功方案中处理数据的方式不同你需要为不同的案例编写代码。