如何失败一个成功的Angular JS $ http.get()承诺

时间:2015-03-21 02:12:59

标签: angularjs angular-promise

如何拒绝或失败成功的$ http.get()承诺?当我收到数据时,我会针对它运行验证器,如果数据没有必需的属性,我想拒绝请求。我知道在承诺得到解决后我能做到,但是尽快拦截错误似乎是个好主意。 我熟悉$ q的好处,但我真的想继续使用$ http。

2 个答案:

答案 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是一篇关于拦截器的有用文章。