2017-03-28 2 views
1

있는 배열 사라하면 코드의값은 요소가 여기에 개체

Object {candidates: Array[0], vote_begin: true, department: "机械与运载工程学部", vote_type: "预选", ballot_type: "记分"} 

우리는 후보자를 볼 수는 하늘의 배열이며, I는 HTTP 포스트를 할 때 $ scope.voteData로 요청하면 후보자가 비어 있습니다. 나는 세부 볼 때 :

Object 
ballot_type:"记分" 
candidates:Array[4] 
department:"机械与运载工程学部" 
vote_begin:true 
vote_type:"预选" 
__proto__:Object 

우리는 후보자를 볼 수있는 네 개의 요소가를 $ http.post가 ('/ 관리/r_candidate', postData를가) 반환하기 때문에 내가 기대되는 :

{status: 0, data: {candidateInfos: [,…], total: 4}} 
data:{candidateInfos: [,…], total: 4} 

왜 후보가 빈 배열이되는지 모르겠습니다.

답변

3

async javascript가 반복되는 논리 문제입니다.

당신은

$scope.get_candidate(); //async data inside 
console.log($scope.voteData); 

는 그것은 success 기능

$http.post('/admin/r_candidate', postData) 
    .success(function (response) { 
    console.log(response.data); 
    $scope.voteData.candidates = response.data.candidateInfos; 
}); 

안에 당신은/결과를 처리해야 할 수 request

은 $ HTTP에서 당신이 결과를 얻을보다 console.log() 빠르게 실행됩니다 실행하면 이것은 anglejs 버전에 따라 the .then syntax을 사용해야한다고 말했습니다.

여기
+0

비동기 기능을 작동 할 수 $ Q를 사용할 수있는 콘솔 출력을두고 비동기 방식을 사용하고있다 : 쿼리가 그 뒤에 오는'console.log' 전에 돌아 오기에 충분히 빠르더라도, 이것은 중요하지 않습니다. – SinDeus

+0

감사합니다. "Promise"가 내 질문에 대한 최선의 해결책이다. –

-1

문제는 결과가 반환되기 전에, 당신은 내가 "빨리"단어의 부적절한 선택이라고 생각

function asyncGreet() { 
      var deferred = $q.defer(); 
      var postData = { 
       department: $scope.voteData.department, 
       group: $scope.voteData.group 
      }; 
      $http.post('/admin/r_candidate', postData) 
        .success(function (response) { 
      $scope.voteData.candidates = response.data.candidateInfos; 
      deferred.resolve(); 
        });); 

      return deferred.promise; 
     } 

     var promise = asyncGreet(); 
     promise.then(function() { 
      console.log($scope.voteData); 
     } 
+0

이것은 작동하지 않을 것이고, 당신은'deferred.resolve (...) '를 호출하지 않았다. 게다가'$ http.post (...) '가 이미 약속을 반환 할 때'$ q'로 귀찮아하는 이유는 무엇입니까? 간단한'return $ http.post (...)'는 충분하다. – SinDeus

+0

하지만 그는 http.post를 호출하는 것이 아니라 메소드를 호출하고 있습니다.이 메소드에서 $ q를 사용하지 않으면 http가 약속을 반환하지 않습니다. 메소드는 http 포스트의 출력이 실행을 마칠 때까지 대기하지 않습니다. – Heshan

+1

My point는 다음과 같다 : _method_ 자체는'$ http.post (...)'의 결과를 리턴 할 것이다 : function asyncGreet() {return $ http.post (...); }'. 그리고 _voilà_ : D – SinDeus