2016-01-20 77 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

通常問一個新問題就容易多了,因爲你有更多的空間來解釋問題是什麼。另外,如果您稍後添加信息,則會使讀者感到困惑,而且沒有人會回頭看看您的更改/新問題。 –