2017-02-17 1 views
1

데이터베이스의 일부 데이터를 가져 오는 AngularJS 함수가 있습니다. 데이터가 데이터베이스에 어떻게 채워지는지에 따라 필자가 찾고있는 일부 데이터를 얻지 못하게 될 것입니다 (원래 호출 중 두 번째 또는 두 번째 데이터를 다시 가져옵니다). 내가하고 싶은 것은 데이터베이스에서 돌아온 결과를 확인하는 것입니다. 특정 유형이 아직 없으면 데이터베이스에서 데이터를 다시 가져 오는 또 다른 약속을 푸시하는 것입니다. 지금까지 내 기능은 다음과 같습니다.결과에 따라 각도 약속을 반복 하시겠습니까?

  function getResponses(ids,user) { 
      var deferred = $q.defer(); 
      var promises = []; 
      var idsString = ""; 

      angular.forEach(ids, function (id) { 
       idsString += "," + id; 
      }); 

      idsString = idsString.substring(1); 

      //Get Response calls retrieves the data from the database 
      promises.push(getResponse(idsString, user)); 

      $q.all(promises).then(function(results) { 
       deferred.resolve(results); 
      }); 

      return deferred.promise; 
     } 

가장 큰 질문은 "검사 결과"부분을 어디에 넣을까요? 나는 그것이 $ q.all 블록에 들어갈 것이라고 생각하지만 데이터베이스에서 결과를 먼저 분석해야하거나 데이터베이스에서 결과를 확인하고 필요한 모든 유형을 포함하고 있다면 해결할 수 있습니까? 그때? 그리고 해결되지 않으면 원하는 결과가 돌아올 때까지 $ 간격으로 getResponse 약속을 계속 진행하십시오.

내가 무엇을 요구할 수 있습니까?

감사

+1

그래서, 기본적으로는 특정 유형의 값에 대한 데이터베이스를 폴링 할가? 그렇다면 형식 매개 변수를 사용하고 해당 특정 값을 확인하는 함수를 만드는 것이 더 논리적 일 것입니다. 그렇게하면 약속의 배열을 만들 수 있고, 모든 것을 기다릴 수 있으며, 모든 것이 해결되면 여러분의 가치를 얻을 수 있습니다. –

답변

0

이미 약속 반환 $q.defer$q.all 때문에와 약속을 제조 할 필요가 없습니다 :

function getResponses(ids,user) { 
    //var deferred = $q.defer(); 
    var promises = []; 
    var idsString = ""; 

    angular.forEach(ids, function (id) { 
     idsString += "," + id; 
    }); 

    idsString = idsString.substring(1); 

    //Get Response calls retrieves the data from the database 
    promises.push(getResponse(idsString, user)); 

    /* NOT needed 
    $q.all(promises).then(function(results) { 
     deferred.resolve(results); 
    }); 

    return deferred.promise; 
    */ 

    //INSTEAD return promise from $q.all 
    return $q.all(promises); 
} 
관련 문제