在提出promise.catch之前,Angular日志错误到控制台

时间:2015-02-23 20:22:04

标签: angularjs promise angular-promise

我觉得我有点疯狂,但即使我定义了catch,Angular似乎也会对一个承诺产生错误。它将错误抛给控制台,然后允许catch运行。

这是super-simple fiddle

测试代码:

$q.when(1)
    .then(function() {
        throw new Error("test");
    }).catch(function(error) {
        console.log('error caught', error);
    });

生成的控制台

enter image description here (肮脏的骗子!)

以下是a fiddle showing what I expect to happen:引发了catch,并且没有其他错误记录到控制台。我没有配置某些东西,或者Angular是否实现了破坏的承诺规范?

1 个答案:

答案 0 :(得分:7)

默认情况下,

angular会将所有错误记录到控制台。

angular还提供了一种覆盖此行为的方法。 $exceptionHandler是一个全局服务,有机会处理任何异常($ http,$摘要期间的错误等)。

如果你添加这段代码:

myApp.factory('$exceptionHandler', function() {
  return function(exception, cause) {
    exception.message += ' (caused by "' + cause + '")';
    //throw exception;
  };
});

然后所有错误都会停止进一步记录。但是会处理catch()处理程序。更新了小提琴:http://jsfiddle.net/5jjx5rn3/

更新:

正如评论中dnc253指出的那样,如果您打算实际覆盖angularjs服务,那么更好的方法。即使不是这个问题的焦点,最好知道简单地声明一个具有相同名称的服务,无论在哪个模块中,服务都被完全替换(最后获胜)。如果想要在原始服务周围添加功能,decorator是正确的选择。