2016-01-20 78 views
0

我有以下的角度服务:发送错误信息,从服务到控制器

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" 

我错过了什么?

UPDATE

我应该有以下服务呢?

function postService($http, $log, settings) { 
    return { 
    get: function (pageNumber, pageSize) {  
     return $http.get(
     "/api/posts", 
     { params: { pageNumber: pageNumber, pageSize: pageSize } } 
    ); 
    } 
    } 
} 

并让控制器处理数据或错误的情况下发生?

我正在做的事情这样,届时约翰PAPP-A的风格指南我读: https://github.com/johnpapa/angular-styleguide#separate-data-calls

在这种情况下,服务处理它...但它不会出现这种情况的情况下返回任何错误。

回答

1

您应该考虑使用$q承诺并创建拒绝原因。

$ q.reject(reason)。根据指定的原因创建一个被拒绝解决的承诺。

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")); 
     }); 
    } 
    } 
} 

在回答你的问题更新:

您曾提到,这是一个风格指南。因此,这是个人偏好。就我个人而言,我想处理服务和控制器端的错误。

原因:

  1. 我可以把同样的错误信息时,该服务被调用,并有错误。我不需要在使用此服务时将其写入每个控制器。记住Angular服务是单身人士。
  2. 我可以在错误传递给控制器​​之前处理服务端的错误。当您在生成控制器之前遇到需要为路由加载一些数据的问题时,这非常有用:解决问题的ui-route的典型用法。
+0

我刚刚为我的问题添加了一个更新...我认为你的建议与我以前的做法类似...是吗? –

+0

通常问一个新问题就容易多了,因为你有更多的空间来解释问题是什么。另外,如果您稍后添加信息,则会使读者感到困惑,而且没有人会回头看看您的更改/新问题。 –