如何拒绝或失败成功的$ http.get()承诺?当我收到数据时,我会针对它运行验证器,如果数据没有必需的属性,我想拒绝请求。我知道在承诺得到解决后我能做到,但是尽快拦截错误似乎是个好主意。 我熟悉$ q的好处,但我真的想继续使用$ http。
答案 0 :(得分:1)
您可以将$q.reject("reason")
返回到下一个链接.then
来拒绝任何承诺。
与$http
相同,后者返回一个承诺 - 可能如下:
return $http.get("data.json").then(function(response){
if (response.data === "something I don't like") {
return $q.reject("bad data");
}
return response.data;
}
这可以简单地在服务中完成,该服务使用上面指定的.then
预处理响应,并返回一些数据 - 或拒绝。
如果你想在应用程序级别执行此操作,可以使用$ http interceptors - 这只是一个提供处理$ http请求和响应的函数的服务,并允许您拦截响应和返回响应 - 相同或修改 - 或响应的承诺,包括拒绝。
.factory("fooInterceptor", function($q){
return {
response: function(response){
if (response.data === "something I don't like") {
return $q.reject("bad data");
}
return response;
}
}
});
与上面相同的想法 - 除了在不同的层面。
注意,要注册拦截器,您需要在.config
:
$httpProvider.interceptors.push("fooInterceptor");
答案 1 :(得分:0)
您可以使用AngularJS interceptors。但是你仍然需要在它们中使用$ q,因为$ http使用$ q。
Here是一篇关于拦截器的有用文章。