$ http传播承诺

时间:2015-09-29 12:51:20

标签: javascript angularjs angular-promise

所以在这个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承诺交织在一起)

- 或 -

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

2 个答案:

答案 0 :(得分:3)

而不是return err;,将其与throw err;一起投放。 $q将处理“未捕获”错误并拒绝该链。

答案 1 :(得分:0)

我不认为没有使用$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