我有一个工厂,它有多个服务来查询我构建的自定义API。回调都可以工作,但我想知道如何在获取时进行任何错误处理。
.factory('customApiService', function ($resource) {
return {
yelp: function (businessId, callback) {
var api = $resource('../../api/Yelp/:businessId', {
businessId: businessId
}, {
fetch: 'JSONP',
'query': { isArray: false }
});
api.fetch(function (response) {
callback(response);
});
},
tripAdvisor: function (hotelId, callback) {
var api = $resource('../../api/TripAdvisor/:hotelId', {
hotelId: hotelId
}, {
fetch: 'JSONP',
'query': { isArray: false }
});
api.fetch(function (response) {
callback(response);
});
}
}
});
在控制器中使用此工厂的示例:
.controller('yelpCtrl', [
'$scope', 'customApiService', function ($scope, customApiService) {
customApiService.yelp("yelpIdHere", function (d) {
//On successful callback run code
});
customApiService.tripAdvisor("tripAdvisorIdHere", function (d) {
//On successful callback run code
});
}
])
目前,如果有任何不良响应(404,500,504等),则不会触发回调。
答案 0 :(得分:2)
必须更改我的工厂以返回errorCallback以及成功的回调:
.factory('customApiService', function ($resource) {
return {
yelp: function (businessId, callback, errorCallback) {
var api = $resource('../../api/Yelp/:businessId', {
businessId: businessId
}, {
fetch: 'JSONP',
'query': { isArray: false }
});
api.query(function (response) {
callback(response);
},
function (error) {
errorCallback(error);
});
},
tripAdvisor: function (hotelId, callback, errorCallback) {
var api = $resource('../../api/TripAdvisor/:hotelId', {
hotelId: hotelId
}, {
fetch: 'JSONP',
'query': { isArray: false }
});
api.query(function (response) {
callback(response);
},
function (error) {
errorCallback(error);
});
}
}
});
所以现在在控制器中,我有第二个函数作为我的工厂调用的参数,它将处理任何错误:
.controller('yelpCtrl', [
'$scope', 'customApiService', function ($scope, customApiService) {
customApiService.yelp("yelpIdHere", function (d) {
//On successful callback run code
},
function(e){
//Do error handling here
});
customApiService.tripAdvisor("tripAdvisorIdHere", function (d) {
//On successful callback run code
},
function(e){
//Do error handling here
});
}
])
This answer似乎有所帮助
答案 1 :(得分:1)
解决方案可能是使用$promise
。 ngResource实例和集合都有$promise
所以不使用$resource
对象,而是使用成功,错误,最后方法带来的promise。 see $q doc on angular site