如何防止angularJS压制脚本错误?

时间:2014-05-21 21:38:29

标签: javascript angularjs

在我的AngularJS示例项目中,我知道我有一个服务方法,应该抛出一个JavaScript错误。

使用Firebug,我确认在从$资源解析promise时会抛出JS错误(TypeError:phone.images未定义);但是,错误永远不会出现在Firebug控制台中。

如何让资源“快速失败”?并将错误传播到调用堆栈?

这是服务代码:

var phonecatServices = angular.module('phonecatServices', ['ngResource']);

phonecatServices.factory('Phone', ['$resource',
  function($resource){
    return $resource('phones/:phoneId.json', {}, {
      query: {method:'GET', params:{phoneId:'phones'}, isArray:true}
    });
  }]);

这是控制器(无声地失败):

phonecatControllers.controller('PhoneDetailCtrl', ['$scope', '$routeParams', 'Phone',
  function($scope, $routeParams, Phone) {
    $scope.phone = Phone.get({phoneId: $routeParams.phoneId}, function(phone) {
      //JS error SHOULD be thrown here:
      $scope.mainImageUrl = phone.images[0]; 
    });

    ...
}]);

我不希望代码无声地失败!我该如何解决?

理想情况下,我想在整个框架中修复它,而不是为每个服务或资源调用添加特殊的错误处理代码。

1 个答案:

答案 0 :(得分:1)

您需要将错误回调添加到get来电:

Phone.get({phoneId: $routeParams.phoneId}, function(phone){
  // Do Stuff with phone object
}, function(error) {
  alert("Y U NO RETURN PHONE?");
  // Handle error accordingly
});

以下是$resource

documentation

如果你想通过角度框架一般性地处理AJAX请求的错误,那么你可能喜欢像http interceptor这样的东西(检查拦截器部分)。这种范例要求所有请求都通过您的拦截器服务以通用方式处理。