2014-10-15 4 views
0

각도 앱이 있지만 때로는 콜백이 실행되기 전에 실행되는 경우가 있습니다. 내 API 호출에 대한 서비스를 정의했다. 그 메소드는 다음과 같다.API 호출 후 각도 콜백

function addOffer(id) { 
     var request = $http({ 
      method: "get", 
      url: "/api/campaign/offers", 
      params: { 
       action: "add", 
       id: id 
      } 
     }); 
     return (request.then(handleSuccess, handleError)); 
    } 
    function handleError(response) { 

     // The API response from the server should be returned in a 
     // nomralized format. However, if the request was not handled by the 
     // server (or what not handles properly - ex. server error), then we 
     // may have to normalize it on our end, as best we can. 
     if (
      !angular.isObject(response.data) || !response.data.message 
     ) { 

      return ($q.reject("An unknown error occurred.")); 

     } 

     // Otherwise, use expected error message. 
     return ($q.reject(response.data.message)); 

    } 

    function handleSuccess(response) { 
     return (response.data); 

    } 

그리고 내 컨트롤러에서 내가 가진 범위 기능은 부하 원격 데이터 기능은 응용 프로그램의 백엔드에 저장되는 것과 클라이언트를 동기화이

$scope.addOffer = function(){ 
    campaignService.addOffer($scope.id).then(
     loadRemoteData() 
    ); 
}; 

같이 정의.

내 문제는 컨트롤러 제안 addOffer에서 offer가 추가되기 전에 loadRemoteData() 함수가 실행되어 새로운 오퍼없이 데이터를로드한다는 점입니다. 그러나 강제적 인 리프레시가있을 때 거기에 오퍼가 있습니다. 이것이 예상대로 작동 할 수 있도록 다르게 수행되어야하는 것이 있습니까?

+0

:

는 귀하의 컨트롤러 코드를 변경

. 이것은 다시 한번 왜 자신의 기본이 매우 강해야 하는지를 반복합니다. –

답변

2

()에있는 문제는 loadRemoteData()입니다. 이 작업을 수행하는 위치에 상관없이 loadRemoteData() 함수는 이 실제로 실행되고이됩니다. 단순히 loadRemoteData 함수를 성공 콜백으로 .then()에 전달하려면 함수의 이름을 전달해야합니다. 내 자바 스크립트 기본에 다시 하락하고 질문에 대답하고`$ http` 약속 구현 $의 q``에 대한 연구의 좋은 금액 후

$scope.addOffer = function(){ 
    campaignService.addOffer($scope.id).then(loadRemoteData); 
}; 
+1

JS와 같은 단순한 개념 이었지만 실망 스럽습니다. JS 기본에 대해 솔직히 말해야 겠네요. – jankyd

+0

때로는 이와 같은 복잡한 세부 사항을 놓치기도합니다. 나는 여러 번 그렇게한다. 그러나 당신이 말하는 것처럼 기본은 당신이 필요로하는 것입니다. –