2014-10-07 71 views
0

在我的角度應用程序中,我有一個控制器。控制器有一種在稱爲Service的服務中調用異步功能的方法。這是控制器代碼:從服務到控制器的角度遞延錯誤

$scope.controllerMethod = function(){  
     Service.serviceMethod($scope.x, $scope.y).then(function(data){ 
       //request succeeded, so do nothing 
     }, function(data){ 
       //there was an error, show error message 
     }); 
} 

這是Service服務中serviceMethod

serviceMethod: function(x, y){ 
     return $http.post('save', { 
       id: x, type: b 
     }).then(function(data){ 
       //update variables in the service 
     }, function(data){ 
       //send error message to controller 
     }); 
} 

Service方法調用服務器,服務器將在必要時返回一個錯誤。我該如何將錯誤響應發送給我的控制器?使用當前設置,無論$http請求是返回成功還是錯誤,控制器中的延遲都會執行它的成功方法。我想調用控制器中延遲的錯誤方法,從服務器傳遞數據。

回答

0

我會寫的服務爲:

serviceMethod: function(x, y){ 
     return $http.post('save', { 
       id: x, type: b 
     }).success(function(data){ 
       // do things Service related when call is successful 
     }).error(function(data, status){ 
       // do things error related... 
     }) 

} 

然後在這樣的控制器,引用它:

Service.serviceMethod($scope.x, $scope.y).success(function(data){ 
     // request succeeded, so do nothing 
}).error(function(data, status){ 
     // error occured, do whatever 
}); 

這就像一個魅力...這裏是docs

+0

曾任職太好了謝謝!但我不知道爲什麼。我認爲'.then()'只是另一種編寫'成功'和'失敗'回調的方法。任何想法爲什麼我會看到不同的行爲?它甚至在你鏈接的文檔中說:「由於調用$ http函數的返回值是一個承諾,所以你也可以使用then方法來註冊回調函數,這些回調函數將接收一個參數 - 一個代表響應的對象。 「 – flyingL123 2014-10-07 18:29:14

+0

我真的不知道,但我瘋狂的猜測會返回一個函數的服務方法,正如我上面以某種方式暴露'成功'和'錯誤'方法的控制器。不知道... – hakazvaka 2014-10-07 18:34:57

+0

我不確定你的意思。據我所知,在這兩種情況下,我們都是從服務方法返回推遲的。他們都返回'$ http(...)' – flyingL123 2014-10-07 18:41:30

相關問題