javascript - 如何防止 angularJS 抑制脚本错误?

标签 javascript angularjs

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

使用 Firebug,我确认在解析 $resource 的 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}
    });
  }]);

这是 Controller (无提示地失败):

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]; 
    });

    ...
}]);

我不希望代码默默地失败!我该如何修复它?

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

最佳答案

您需要将错误回调添加到您的 get 调用中:

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

这是documentation对于$resource

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

关于javascript - 如何防止 angularJS 抑制脚本错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23794282/

相关文章:

javascript - 使用 typeahead 时在 onblur 事件期间选择值

javascript - 值只会在 html 文本框中闪烁一次

javascript - 为什么我无法访问 AngularJS Controller 的子元素?

javascript - 调查问卷“下一步”按钮的逻辑?

javascript - 使用 Angular 表达式有条件地将字符串添加到 HTML

javascript - 避免必须双击才能切换 Bootstrap 下拉菜单

javascript - 如何在悬停时淡入一个div?

javascript - GSheet 脚本要求

javascript - 使用AJAX定时器获取 "PHP URL Content"

javascript - 点击跟踪器的颜色变化