2014-03-19 3 views
1

여러 $ http 요청이 완료된 후 함수를 실행하는 적절한 방법은 무엇입니까? 2 가지 옵션이 있지만 어느 것이 적절한 것인지 잘 모르겠습니다. 'one'과 'two'다음에 'done'로그가 모두 완료되었음을 유의하십시오.각도로 다중 약속을 처리하는 올바른 방법

우선 배열에 대한 모든 $ http 요청을 푸시하고 $q.all(promises).then을 사용하여 최종 콜백을 실행했지만이 위치를 기억하지 못합니다.하지만 내 로컬 호스트 빠른) 요청을 처리에있다 :

var one = $http.get("/request/one/"), 
    two = $http.get("/request/two/"), 
    promises; 

    one.then(function(response){ 
     console.log('one'); 
    }); 

    two.then(function(response){ 
     console.log('two'); 
    }); 

    promises = $q.all([one, two]); 

    promises.then(function(){ 
     console.log('done'); 
    }); 

둘째, 나는 https://egghead.io/lessons/angularjs-q-all을 포함하여 몇 가지 튜토리얼, 그것을 본 적이 :

var one = $q.defer(), 
    two = $q.defer(), 
    promises; 

    $http.get("/request/one/").then(function(response){ 
     one.resolve('one'); 
    }); 

    $http.get("/request/two/").then(function(response){ 
     two.resolve('two'); 
    }); 

    promises = $q.all([one.promise, two.promise]); 

    promises.then(function(result){ 
     console.log('done'); 
    }); 
+1

두 번째 것은 "연기 방지 패턴"이라고합니다. 첫 번째는 엄격하게 더 좋습니다. –

답변

2

당신은 확실히 첫 번째 방법으로 가야한다. 두 번째 것은 두 가지 불필요한 약속을 만듭니다. $http은 이미 약속을 반환하므로 $q.defer()으로 두 개를 더 만들 필요가 없습니다.

관련 문제