我有一个服务器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。
编辑:删除了我之前的评论 - 请参阅接受的答案。
答案 0 :(得分:2)
transformResponse
通常用于转换来自其他格式(或类似用途)的响应。
您要找的是intercept
。
$httpProvider.interceptors.push(function($q) {
return {
'response': function(response) {
if (isBad(response)) {
return $q.reject(rejectionReason(response));
}
}
};
});