2017-02-08 1 views
0

데이터베이스에 액세스하는 데 Restangular를 사용하는 Angularjs 프로젝트가 있습니다. 세 가지 데이터 레이어 (mydata, mysubdata, mysubsubdata)가 있으며 각 레이어간에 일대 다 관계가 있습니다. 내 문제는, 내 디스플레이, mysubsubdata mysubdata 연결할 필요가있다. 데이터베이스에서 데이터를 다시 가져 오려고하면 컴파일러에서 루프에 함수를 포함 할 수 없다는 불만이 있습니다. 그 때는 함수 내에서 루프는.then 내부의 루프 내부에서 함수를 사용하려면 어떻게해야합니까?

DataService.one(mydata.id).getList('mysubdata') 
.then(function(data) { 
    var dataList = data; 
    for (returnedData in dataList) { 
    DataService.one(mydata.id).one('mysubdata',returnedData.id).getList('mysubsubdata') 
    .then(returnedSubData) { 
     dataList = angular.extend(dataList, returnedSubData); 
    }); 
    } 
}); 

모든 예제 내가 찾은거나 다시 첫 번째 약속의 무리를 얻기 위해 노력하고있다 : 여기에 내가 할 노력하고 있는지. 나는 그것들을 적용한다고 생각하지 않는다. 나는 여전히 Angular에서 꽤 새롭기 때문에 조금 움직일지도 모른다. 연장에 대해서도 잘 모르겠지만 그것은 별개의 질문 일 것입니다.

편집 : 나는 이것이 $ q.all로해야한다고 생각하지만 아직 방법을 이해하지 못했습니다.

+0

제 생각에'then '을 사용하기 위해'promise'를 돌려 주어야합니다. – jdmdevdotnet

+0

DataService는 Restangular를 사용하고 있습니다. 첫 번째 부분 (두 번째 DataService까지)은 정상적으로 작동합니다. 설명하지 않아서 미안해. –

+0

싸이클 안에 마개를 만들려고 했습니까? –

답변

0

루프 내에서 then() 메서드를 추가하면 루프가 약속이 해결 될 때까지 기다리지 않는다는 단순한 이유 때문에 작동하지 않습니다. 재귀 적 방법을 사용하여이를 달성 할 수 있습니다.

var myCustomData = null, 
    dataList = null, 
    dataListCounter = 0; 

DataService.one(mydata.id).getList('mysubdata') 
    .then(function (data){ 
    dataList = data; 
    myCustomData = mydata; 
    $scope.getSubSubData(); 
}); 

$scope.getSubSubData = function() { 
    if (dataList.length >= dataListCounter) 
    return; 
    DataService.one(myCustomData.id).one('mysubdata',dataList[dataListCounter].id).getList('mysubsubdata') 
    .then(function (returnedSubData) { 
     dataList = angular.extend(dataList, returnedSubData); 
     dataListCounter++; 
     $scope.getSubSubData(); 
    }); 
}; 

이 정보가 도움이되는지 알려주십시오.

+0

DataService 호출에서 오류가 발생 했으므로이를 수정했습니다. 나는 너의 대답을 시도하고있다. 참고, if에 중괄호를 추가해야했습니다. –

+0

아직 작동하지 않습니다. getSubSubData 조각이 호출되지 않는 것 같습니다. 내가 단계를 밟을 때 getSubSubData 행에 도달 한 것처럼 보이지만 함수 내부의 중단 점은 절대 적중되지 않습니다. 이 코드는 컨트롤러가 아닌 서비스 안에 있습니다. –

+0

바이올린을 제공 할 수 있습니까? –

0

@Anadi Sharma의 답변에 약간의 수정.

$scope.getSubSubData = function() { 
    if (dataList.length == dataListCounter) 
    return; 
    DataService.one(myCustomData.id).one('mysubdata',dataList[dataListCounter].id).getList('mysubsubdata') 
    .then(function (returnedSubData) { 
     dataList[dataListCounter].mysubsubdata = returnedSubData; 
     dataListCounter++; 
     $scope.getSubSubData(); 
    }); 
}; 

하위 데이터 값을 연결하는 데이터를 표시 할 때 필터를 사용한다는 점에 유의하십시오.

관련 문제