我有以下Angular服务:
function postService($http, $log, settings) {
return {
get: function (pageNumber, pageSize) {
return $http.get(
"/api/posts",
{ params: { pageNumber: pageNumber, pageSize: pageSize } }
).then(function (response) {
return response.data;
}, function (response) {
$log.error("Service Error");
return "Service Error";
});
}
}
}
当一切正常时我返回数据......但是当出现错误时我希望控制器知道它,以便它可以显示例如消息。
然后控制器是:
function PostListController($timeout, settings, postService) {
var vm = this;
vm.posts = [];
vm.pagination = { pageNumber: 1, pageSize: 4 };
vm.load(1, 4);
vm.load = function (pageNumber, pageSize) {
postService.get(pageNumber, pageSize)
.then(function (data) {
console.log("Controller Success");
vm.posts = data;
}, function (error) {
console.log("Controller Error");
console.log(error);
});
};
}
当我模拟我在控制台上看到的服务上的错误时:
"Server Error"
"Controller Success"
什么时候应该是这样的:
"Server Error"
"Controller Error"
我错过了什么?
更新
我应该提供以下服务吗?
function postService($http, $log, settings) {
return {
get: function (pageNumber, pageSize) {
return $http.get(
"/api/posts",
{ params: { pageNumber: pageNumber, pageSize: pageSize } }
);
}
}
}
如果发生这种情况,让控制器处理数据或错误?
到那时我正在以这种方式做事John Pappa Style指南: https://github.com/johnpapa/angular-styleguide#separate-data-calls
在这种情况下,服务会处理它......但是如果发生这种情况,它不会返回任何错误。
答案 0 :(得分:1)
您应该考虑使用$q
承诺并创建拒绝原因。
$ q.reject(原因)。创建一个以指定原因解析为已拒绝的承诺。
function postService($http, $log, settings, $q) {
return {
get: function (pageNumber, pageSize) {
return $http.get(
"/api/posts",
{ params: { pageNumber: pageNumber, pageSize: pageSize } }
).then(function (response) {
return response.data;
}, function (response) {
$log.error("Service Error");
return ($q.reject("Service Error"));
});
}
}
}
你曾提到它是一种风格指南。因此,这是个人偏好。就个人而言,我想处理服务和控制器方面的错误。