在$ http中如何有条件地转换响应以便采用错误路径

时间:2015-06-17 22:49:10

标签: angularjs ionic-framework

我有一个服务器api,它返回一个像{status: ok/error, errtext: ..., payload: ...}这样的json字符串。当status !== 'ok'我希望我的程序采用错误处理方法时,相当于$q.reject。我正在使用http转换来协调我的一些数据结构。

我的代码:

var p = $http({
            url: url,
            timeout: cancel.cancel,
            method: 'GET',
            headers: addl_headers,
            transformResponse: _appendTransform($http.defaults.transformResponse, function (data, headers, status) {
                return _doTransform(data, headers, status);
            })
        });
p.then(function(goodrespObj){...}, function(badnessObj){...});

    function _appendTransform(defaults, transform) {
        defaults = angular.isArray(defaults) ? defaults : [defaults];
        return defaults.concat(transform);
    }
    function _doTransform(data, headers, status) {
        if (data.status !== 'OK') {
            console.error("bad errtext", data.status, "$http status", status);
            (X) ????? something smart that will trigger HTTP ERROR path ?????
        }
        // ...
        return f(data); // this is received as "goodrespObj.data" above
    }

如果在标记为(X)的点处,如果我返回错误文本,则它会逐字回到“正常”功能。如何指示服务器错误,或以某种方式导致$q.reject(resp)中的transformResponse路径?

查看transformResponse()的代码我可以看到用户功能无法触及response.status,还有另一种方法吗?

我正在使用angular with ionicframework。

编辑:删除了我之前的评论 - 请参阅接受的答案。

1 个答案:

答案 0 :(得分:2)

transformResponse通常用于转换来自其他格式(或类似用途)的响应。

您要找的是intercept

$httpProvider.interceptors.push(function($q) {
  return { 
    'response': function(response) {
       if (isBad(response)) {
           return $q.reject(rejectionReason(response));
       }
    }
  };
});