2014-07-15 5 views
0

때까지이 공장마무리

produccionApp.factory('eskuratudatuak', function ($http, $q){ 
    return { 
     getNestedDataBetter: function (desde, hasta){ 
      return $q.all (
       $http.get('/planificacion/1/' + desde + '/' + hasta) 
      ) 
      .then (function(results) { 
       angular.forEach(results.data, function(eguna) { 
        console.log("xie!"); 
         angular.forEach(eguna.linea1, function(turno) { 
           angular.forEach(turno.ordenes, function(orden) { 
            var url = "http://someurl:5080/expertis/delaoferta?of="+ orden.ref; 
            return $q.all($http.get(url)) 
            .then(function(datuak){ 
             console.log("not finish yet"); 
             for (var k=0; k < datuak.length; k++) { 
              if (datuak[k].QPendiente < datuak[k].QNecesaria) { 
               orden.badutstock = 1; 
              } else { 
               orden.badutstock = 0; 
              } 

             } 

            }) 

           }); 
         }); 
       }); 
       console.log("finish!"); 
       return results.data; 
      }); 
     } 
    }; 
}); 

그리고 출력을 기다려야하는 것입니다 :

Here! 
xie! 
finish 
XHR finished loading: GET .... 
not finish yet 
XHR finished loading: GET .... 
not finish yet 
XHR finished loading: GET .... 
not finish yet 
XHR finished loading: GET .... 
not finish yet 

그러나 올바른 아웃해야

Here! 
xie! 
XHR finished loading: GET .... 
    not finish yet 
XHR finished loading: GET .... 
    not finish yet 
XHR finished loading: GET .... 
    not finish yet 
XHR finished loading: GET .... 
    not finish yet 
finish 

미안 웹 서비스를 호출하고 그것이 완료되면 일부 foreach 루프 마녀가 내 웹 서비스를 호출 할 때마다 데이터 변수를 구축합니다. 내가 데이터를 returnin 전에 모든 호출을 완료해야

....

어떤 단서?

+0

이 라이브러리를 살펴보면 아마 https://github.com/caolan/async 도움이 될 것입니다. – pedromarce

답변

0

문제는 약속의 계단식을 관리하는 것이므로 프로세스를 계속 진행하기 위해 약속의 이행을 관리해야하지만, 귀하의 경우에는 첫 번째 약속 만 기다린 다음 다른 요청을 시작합니다 결코 콜백을 기다릴 필요가 없습니다.

찾고있는 것을 달성하는 데는 여러 가지 방법이 있지만 누군가가 이미 사용하고 코드에서 볼 수있는 라이브러리를 작성하여이를 수행하는 방법을 배우게됩니다.

여기를보세요 https://github.com/caolan/async.