(работает с Angular 1.5)
Прочитал множество статей (некоторые свежие, некоторые старые/устаревшие) на тему $http-запросов, промисов и разделения проблем, и в настоящее время я экспериментирую с приведенным ниже примером (Plunker здесь).
Надеялся получить отзыв о следующей умственной головоломке, пожалуйста:
Что касается запроса $http.get()
, достаточно ли я сделал, чтобы обеспечить разделение проблем между контроллером и внедрённым сервисом?
Я понимаю, что контроллеры могут не нести ответственность за обработку обратного вызова ошибки, но я думал примерно так: если произошла ошибка http (например, сервер не работает), то, безусловно, контроллер захочет выполнить некоторые непредвиденные задачи, например. отменить загрузку счетчика, перенаправить на страницу с ошибкой и т. д.
Извините, если этот вопрос кажется слишком общим - я надеюсь, что приведенный ниже вариант использования приемлем.
( function () {
var app = angular.module('myApp', []);
app.service('userService', ['$http', '$q', function($http, $q) {
this.getUsers = function(url){
return $http.get(url).then(
function(response) { // success
return response.data;
})['catch']( // error ('catch' workaround for IE8)
function(response) {
return $q.reject(response);
}
);
};
}]);
app.controller('usersCtrl', ['$scope', 'userService', function($scope, userService){
$scope.getUsersData = function(url) {
userService.getUsers(url).then(
function(data){ // success - set $scope data, cancel spinner, etc
console.log(data);
},
function(error){ // error - cancel spinner and display error messages, or possibly redirect to custom error page, etc
console.log(error);
}
);
};
$scope.getUsersData('dummyData.htm');
}]);
}());