2016-06-05 2 views
1

안녕하세요, 저는이 API 호출에 다소 문제가있었습니다. 이 API 호출을 만들면 내 서비스에서 console.log를 호출하면 필요한 것은 반환되지만 컨트롤러는이를받지 않고 빈 객체를 반환합니다. 나는 내 약속을 되 돌릴 때 내가 뭔가 잘못하고 있다고 생각하지만 문제를 발견 할 수 없다. 저는 현재 $ q.all()을 사용하여 여러 개의 get 요청을 연결하고 있습니다. 현재 이곳에

$scope.getData = function(input) { 
    exampleService.getData(input) 
     .then(function(data) { 
      console.log(data); 
      $scope.savedData = data; 
    }, function(error) { 
      alert(error); // just sends an alert with -1 if error 
    }); 
}; 

내 서비스 기능 내가) ($의 q.all을 반환하려고 지금

this.getData = function(input) { 
$q.all([ 
    $http.get(url1), 
    $http.get(url2) 
]).then(function(response) { 
    console.log(response); //returns array of objects that I want 
    return response; 
}); 
return $q.all(); 
}; 

을 약속 : 여기

내 컨트롤러 기능에 대한 나의 코드입니다. 하지만 내 콘솔에 오류가있어 :

미정

의 I 궁극적

var returnedPromise = [ 
    {dataIDontNeed:1, {dataIwant}}, 
    {dataIDontNeed:2, {dataIwant}}, 
    {dataIDontNeed:3, {dataIwant}} 
] 

싶습니다 또한 예를 들면 객체에서 중첩 목적 어레이에서 각 객체에 하나의 특성에 액세스하려는 '다음'속성을 읽을 수없는 그 약속을 되찾기 전에 그 방법이 있는지 알기 위해 데이터가 인 객체 배열에서 객체를 가져온다. 누구든지 나를 도울 수 있다면 매우 감사 할 것입니다.

+1

두 번째 질문 (명백한 오타가 아님)에 대해서는'then' 콜백의'response'가 아닌 다른 것을'return '할 수 있습니다. – Bergi

답변

3

$ q의 다른 빈 사본을 돌려 보내고 있습니다. 그냥 서비스

return $q.all([ $http.get(url1), $http.get(url2) ]); 

에서 원래 $의 q.all 약속을 반환하고 컨트롤러에서이 작업을 수행 :

service.getData({}).then(... 

당신은 단지에 바로 해결있어 또 다른 약속을 체인 결과를 변환하려면 모든 기능. 데이터가 원하는대로 표시되면 원하지 않는 속성을 삭제하면됩니다.

return $q.all([ $http.get(url1), $http.get(url2) ]). 
then(function(results){ 
    return results.map(function(each){ 
     delete each.dataIDontNeed; 
     return each; 
    }); 
    }); 

컨트롤러에서와 똑같이 처리하십시오.

+0

고마워요! 내 질문의 두 번째 부분에 대해 염두에 두어야 할 해결책이 있습니까? – FredDupe