2017-12-28 34 views
0

각도 앱을 제작 중입니다. 내 구성 요소의 생성자에서 서버에서 자연스럽게 비동기 적으로 발생하는 여러 요소에 대한 요청을 시작합니다. 이러한 요청은 내가 구독하는 rxjs/Behavior 개체로 내게 반환됩니다.비동기 이벤트 목록을 처리하고 모두 완료되면 계속 진행하는 우아한 방법은 무엇입니까?

내가해야 할 일은 마지막 작업이 끝나 자마자 처리를 계속하는 것입니다. 하지만 NEED은 제출 된 순서대로 처리되었는지 확인해야합니다. 반환 된 순서와 반드시 일치하지는 않습니다.

let counter = 0; 
let output = new Array(input.length); 
for (let i = 0 ; i < input.length ; i++) { 
    counter++; 
    fetch(input[i]).subscribe( 
    result => { 
     output[i] = result; 
     counter--; 
     if (counter === 0) { 
     // what to do at the end 
     } 
    } 
); 
} 

을 그리고이 작품 :

나는 마지막 하나가 반환 될 때 감지 할 수는 janky 해킹을 만들 수 있습니다. 그러나 이해하기 쉽지 않으며 생산 준비 코드라고 부르는 것이 아닙니다.

피사체 배열이 모두 충족되면 무엇인가하는 각도 방법은 무엇입니까?

+0

'제목'을받지 말아야합니다. 문제의 API에 대한 책임이 있다면'.asObservable()'을 사용하여 구현을 숨길 수 있습니다. 그렇지 않으면 새 라이브러리를 찾는 것이 좋습니다. –

답변

3

당신은 forkJoin 찾고 :

Observable.forkJoin(...input.map(fetch)) 
.subscribe(responses => { 
    // responses contains the emitted values after completion 
    // in the same order as input 
    }); 

은 자세한 내용과 조심해야 할 사항에 대한 the docs를 참조하십시오.

향후 확장 팁으로 rxjs 웹 사이트에는 다양한 상황에서 찾고있는 연산자를 찾는 데 도움이되는 매우 좋은 설문지가 있습니다.