在我的 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/