【发布时间】:2015-06-19 01:38:40
【问题描述】:
我有一个服务器 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) 的点上,如果我返回错误文本,它会逐字返回“良好”功能。如何指示服务器错误,或以某种方式导致transformResponse 中的$q.reject(resp) 路径?
查看transformResponse()的代码我可以看到用户功能无法触摸response.status所以还有其他方法吗?
我正在使用带有离子框架的角度。
编辑:删除了我之前的评论 - 查看接受的答案。
【问题讨论】:
-
您是否考虑过添加响应拦截器?您应该能够检查所有响应中的 JSON,并在它们到达您的控制器之前将它们变成拒绝。在这里查看接受的答案:stackoverflow.com/questions/11956827/…