2017-05-12 4 views
1

내가 JSON 반환이 API 호출을 말해봐 행을 찾은 다음 detailId를 가져 오는 각 행 객체를 반복하여 rowDetails를 다시 호출하고 행 객체에 세부 정보를 첨부합니다. 최종 구조는과 같이 방출 할 필요가 : 각 1에서Observables은/RxJS와 각도에서 두 종속 API 호출을 병합

{ 
    {"row": 1, "detailId": a, "details": { row details}} 
    {"row": 2, "detailId": b, "details": { row details}} 
} 

내가 완료 모든 호출을 기다리는 q.allSettled을 사용합니다.

나는 이것을 관측 할 수있는 방법으로하려고 노력하고 있으며, 나는 개념적으로 실질적으로 어려움을 겪고있다. 나는 당신이 실제로 최종 제품으로 병합 된 "스트림"을 방출하기로되어있는 방법을 얻지 못합니다.

나는 대략 시도했다 :

this.http 
    .get('rows') 
    .map(res => res.json()) 
    .flatMap(group => this.http.get('rowDetails' + detailId)) 
    .map(res => res.json()). 
    .subscribe(res => console.log(res)) 

그냥 rowDetails 전화 방출 구독합니다. 행의 각 객체를 반복하고 최종 제품의 결과를 병합하는 동안 다른 호출에 대한 detailId를 가져 오는 방법은 무엇입니까? 어떤 도움이라도 대단히 감사하겠습니다.

+0

두 번째'get'은 실제로 첫 번째 결과에 의존합니까? 그렇지 않다면 Observable.combineLatest가 최상의 선택 인 것 같습니다. – jonrsharpe

+0

그렇습니다. 각 행 객체의 detailId가 필요합니다. 특정 행에 대한 행 세부 정보를 가져 오기 위해 호출합니다. – AnotherMike

+0

첫 번째 호출의 각 결과에 대해 하나의 호출을 분할하고 모든 결과를 함께 다시 결합 하시겠습니까? – jonrsharpe

답변

2

각 항목을 가져 와서 HTTP 요청을 만들고이 내부 요청이 완료된 후 업데이트 된 항목을 추가 전파해야합니다. 실제로 내부 map에서 group을 반환하고있어

this.http 
    .get('rows') 
    .map(res => res.json()) 
    .flatMap(group => this.http.get('rowDetails' + group.detailId) 
     .map(res => { 
      group.details = res.json(); 
      return group; 
     }) 
    ) 
    .subscribe(res => console.log(res)) 

알 수 있습니다. 분명히 많은 접근 방법이 있지만 가장 쉬운 방법이라고 생각합니다.