$http 在承诺中传播错误

$http propagate errors in promises

所以在这个 plnkr 中,我演示了一个失败的 $http 请求。

服务的职责是解构服务器响应并准备信息供控制器使用。

当它出错时,我觉得我需要将错误传播到控制器不是为了处理而是为了能够通知用户操作无法完成。 (在日志记录等意义上处理)

目前情况:

return $http.get('notgoing')
  .then(
    function success(result) {
      return result.data;
    },
    function error(err) {
      console.warn(err); // do something meaningful with the error

      return err;
    }
  );

这会将错误或成功汇总到链式承诺的成功函数中。这不适合通知用户。

有没有一种简单的方法可以让错误函数将值作为错误冒泡到下一个链式承诺的错误函数。 (请记住,我真的不想依赖 $q 库并将另一个承诺与 $http 承诺交织在一起)

- 或 -

处理该错误的责任是否在服务停止。

throw err;代替return err;$q 将处理 "uncaught" 错误并拒绝链。

我认为没有不使用 $q 的方法,但是 Angular 带来了它自己的实现,所以您需要做的就是将它注入您的服务,然后调用$q.reject(err)。否则Angular会认为你的错误已经在服务内部处理了。

angular.module('test', []).factory('testService', function ($http, $q) {
  ...  
  function test() {
    return $http.get('notgoing').then(function success(result) {
      return result.data;
    }, function error(err) {
      console.warn(err);
      return $q.reject(err);
    });
  }
});

检查更新后的Plunker