2014-03-13 3 views
2

나는 설정을 가지고 AngularJS와 resource :AngularJS와가 - 약속을 처리하는 방법을 올바르게

app.factory('gridData', function($resource) { 
     var csrf = 'asdf'; 
     return $resource('/my/url/:expID', {expID:'@id'},{ 
       get: {method:'GET'}, 
       query: {method:'GET', isArray:true}, 
       save:{method:'POST', headers: {'X-CSRFToken' : csrf }} 
      }); 
}); 

I는 서버에서 데이터를 가져 오기 위해 그것을 사용하여 내 컨트롤러에 gridData 자원을 주입 해요 :

 gridData.query(function(result) { 
      console.log("result is"); 
      console.log(result); 
      $scope.data = result; 
     }); 

이 접근법은 AngularJS 1.3을 사용하여 잘 작동합니다. console.log(result) 문은 수신 된 실제 데이터를 인쇄합니다.

이제 AngularJS 1.2.11로 다운 그레이드를 시도했는데이 picture과 같이 console.log(result)이 약속을 인쇄하므로 문제가 있습니다. 결과적으로 $scope.data이 약속으로 설정되었지만 실제로는 실제 데이터를 사용할 수있을 때만 $ scope.data를 설정해야합니다.

일부 버전에서는 1.3에서 1.2 사이의 약속이 앵귤러에 도입 되었기 때문입니다. 어떤 상황에서이 상황을 어떻게 처리 할 것인가/정확하게 약속을 다루는가?

답변

0

the docs on the $q service에서 "The Promise API"섹션을 확인하십시오. Angular promises에서 this video을 체크 아웃 할 수도 있습니다.

주된 방법은 .then입니다.

gridData.query(function(promise) { 
      promise.then(function (result) { 
       console.log("result is"); 
       console.log(result); 
       $scope.data = result; 
      }); 
     }); 

이 예는 청소기가 될 수 있지만, 설명을 목적으로 작동 : 다음은이 방법으로 코드를 리팩토링 수있는 방법입니다. 희망이 도움이됩니다.

+0

마이그레이션 후 동일한 문제가 발생했습니다. 1.2 -> 1.3. 내 방법은 너와 똑같아. 왜 이런 방식으로 작동하는지 이해할 수 없으며 다음과 같은 임시 해결 방법을 사용해야합니다. delete $ scope.myObj. $ resolved; $ scope.myObj를 삭제하십시오. $ promise; – vicont

관련 문제