在我的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];
});
...
}]);
我不希望代码无声地失败!我该如何解决?
理想情况下,我想在整个框架中修复它,而不是为每个服务或资源调用添加特殊的错误处理代码。
答案 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
如果你想通过角度框架一般性地处理AJAX请求的错误,那么你可能喜欢像http interceptor这样的东西(检查拦截器部分)。这种范例要求所有请求都通过您的拦截器服务以通用方式处理。