2014-09-09 2 views
0

나는 JavaScript 프로그래밍을 처음 사용하기 때문에 비동기 문제로 정말 고심하고있다. 내가 아래에있는 내 예를 보여주기 위해 노력했다 :각도 - 다중 약속 및 반복 - 결과를 얻는 방법

컨트롤러를

$scope.handleClick = function(stuff) { 
    var promise = fetchOtherStuffs(stuff.id1); 
    var promiseTwo = fetchOtherStuffs(stuff.id2); 

    $q.all([promise, promiseTwo]).then(function(data) { 
     // fails because data is undefined 
     console.log(data[0].length); 
     console.log(data[1].length); 
    }); 
}; 

var fetchOtherStuffs = function(stuffId) { 
    return $http.get('http://localhost/myapi/stuff/' + stuffId) 
     .then(function(theStuffs) { 
      var promises = []; 

      for (var i = 0; i < theStuffs.data.length; i++) { 
       var otherStuffId = theStuffs.data[i].otherStuffId; 
       promises.push( 
       $http.get('http://localhost:8085/myapi/otherstuff/' 
        + otherStuffId)); 
      } 

      $q.all(promises).then(function(data){ 
       var result = []; 

       for (var i = 0; i < promises.length; i++) { 
        result.push(data[i].data[i]); 
       } 

       // this works and the data count is as expected 
       console.log('returning: ' + result.length);    
       return result; 
     });    
    });   
}; 

그래서 내가 필요 :

  • myapi/stuff가 호출의 결과를 가지고

    • 전화 (여러 될 수있는 객체)를 호출하고 각각의 객체에 대해 /myapi/otherstuff을 호출하십시오.
    • otherstuff 다시 handleClick 방법

    에 정말 약속은 그것이 handleClick 방법으로 필요한 때 값을 반환 실제로 수익을 오도록 fetchOtherStuffs에게 메소드를 구현하는 방법을 모르겠어요.

    고마워요.

  • +3

    return $ q.all (promise) .then (function() {...})'이어야합니다. – dfsq

    답변

    2

    당신은 myapi/stuff을 받고 후 then 콜백의 작은 작은 return을 잊었 : 또한

    function fetchOtherStuffs(stuffId) { 
        return $http.get('http://localhost/myapi/stuff/' + stuffId) 
        .then(function(theStuffs) { 
         … 
         return $q.all(promises).then(function(data){ 
    //  ^^^^^^ 
          … 
          return result; 
         }); 
        }); 
    } 
    

    , 나는 확실하지 않다

    for (var i = 0; i < promises.length; i++) { 
        result.push(data[i].data[i]); 
    } 
    

    에 두번 [i] 속성에 액세스 여부 물론 정확하지만 데이터 형식에 따라 다릅니다.

    +0

    @Shomz처럼 downvote에 대한 설명을 기다리고 있습니다 ... – Bergi

    +0

    +1 ... 다른 보복은 보복적인 것 같습니다. –

    +0

    많이 고마워요. 오늘 밤 약속 된 블로그 포스트를 가지고 집에 돌아가서 좀 더 잘 이해할 것입니다. 이제 코드를 변경 했으니 까, 나는 제안한대로 데이터 [i] 만 필요합니다. – planetjones