Javascript $http在承诺中传播错误

Javascript $http在承诺中传播错误,javascript,angularjs,angular-promise,Javascript,Angularjs,Angular Promise,因此,在本文中,我演示了一个失败的$http请求 服务的职责是解构服务器响应,并准备好供控制器使用的信息 当它出错时,我觉得我需要将错误传播到控制器,不是为了处理,而是为了能够通知用户操作无法完成。(在日志记录等方面的处理) 目前的情况是: return $http.get('notgoing') .then( function success(result) { return result.data; }, function error(err) {

因此,在本文中,我演示了一个失败的
$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;
    }
  );
这将把错误或成功汇总到链式承诺的成功函数中。这不适合通知用户

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

-或-


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

而不是
返回错误
,使用
throw err抛出它
$q
将处理“未捕获”错误并拒绝该链。

我认为没有办法不使用
$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);
    });
  }
});

检查更新的。

Genius。。。。我原以为这会导致整个应用程序崩溃。但这很公平!你能提供一些解释或仅仅是另一个链接:)@shryas公平的说,如果你把它扔到plnkr中,有足够的解释吗?谢谢,但我想知道它在打电话时会有什么不同,根据我的理解,它会称错误为错误的一部分。那么,除了成功之外,我说过我想避免这种模式。我知道。我知道,但我认为没有其他方法(这是不正确的)。我可以问一下为什么您希望避免使用
$q
?只是一个小插件:这解释了使用
抛出
拒绝
之间的区别。