2014-10-07 4 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()'은'success'와'failure' 콜백을 작성하는 또 다른 방법 일뿐입니다. 내가 왜 다른 행동을 보는지 어떤 생각? "$ http 함수 호출의 리턴 값은 약속이기 때문에 then 메소드를 사용하여 콜백을 등록 할 수 있으며이 콜백은 응답을 나타내는 단일 인수를 수신합니다. " – flyingL123

+0

실제로는 알 수 없지만, 위에서 설명한대로 서비스 메서드에 함수를 반환하면 컨트롤러에 '성공'및 '오류'메서드가 노출됩니다. 확실하지 않습니다 ... – hakazvaka

+0

무슨 뜻인지 잘 모르겠습니다. 두 경우 모두 내가 말할 수있는 한, 우리는 서비스 방법에서 연기를 반환하고 있습니다. 둘 다'$ http (...)'를 반환합니다. – flyingL123

관련 문제