Angular 在引发 promise.catch 之前将错误记录到控制台

Angular logs error to console before raising promise.catch

我觉得我有点疯狂,但是即使我定义了 catch,Angular 似乎也会为 promise 抛出一个错误。它向控制台抛出错误,然后允许 catch 到 运行。

这是一个super-simple fiddle

测试代码:

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

生成的控制台

(肮脏的骗子!)

这里是 a fiddle showing what I expect to happen:引发了 catch,并且没有其他错误记录到控制台。我是不是配置了什么东西失败了,还是 Angular 实现了一个违背承诺的规范?

angular 默认情况下将所有错误记录到控制台。

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

如果加上这段代码:

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

然后所有错误都会停止进一步记录。虽然会处理 catch() 处理程序。已更新 fiddle:http://jsfiddle.net/5jjx5rn3/

更新:

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