2017-12-26 17 views
0

내가 현재이 상황을 요청 getList()의 결과,이 부분을 "동기화"할 수있는 방법, 또는이 작업을 수행하는 데 올바른 형식이 무엇입니까? 은 "입술"Angular5 RXJS 재귀 HTTP는

this.MyService.getList().subscribe(results => { 
     let url = 'https://api.github.com/users/'; 
     for(let res in results) {//This don't do the things "synchronous" 
      this.http.get(url + res.login +'/starred').catch(err => { 
       throw new Error(err.message); 
      }).subscribe(starred_res => { 
       //So we set the starred_list 
       res.starred_list = starred_res 
      }) 
     } 
    }) 

감사합니다 ...는 "interable"때문에

는 ** 내가 잘못 그것을 하드 --Result ID를 수행하려고 당신이 별표 싶어 알고있는 것처럼

답변

0

모든 사용자에 대한 목록.

가장 간단한 방법은 모든 별표 표시된 목록을 얻는 것이며 은 사용자 결과로과 일치시킵니다.

// Get users 
this.MyService.getList().subscribe((results: any[]) => { 

    const url = 'https://api.github.com/users/'; 

    // Create requests to get starred list for every user 
    const starredRequests = results.map(
    res => this.http.get('https://api.github.com/users/' + res.login + '/starred') 
); 

    // Wait when all starred requests done and map them with results array 
    Observable.forkJoin(starredRequests).subscribe(starred => { 

    results.forEach((res, index) => { 
     res.starred_list = starred[index]; 
    }); 

    console.log(results); 
    }); 

}); 
+0

감사합니다. 그래서, 항상 "중첩 된 요청"을 가지고, "forkJoin"을 수행하고 "목록의 색인"을 만들 필요가 있습니까? 또 다른 질문은 "비동기 요청"을 어떻게 수행하여 목록의 한 요소에 반영 할 수 있습니까? 따라서 페이스 북의 게시물에서 '좋아하는 것'의 가치를 얻고 싶다고 가정하면이 결과는 미리로드 할 필요가 없으며 언제든지 응답 할 수 있으며이 결과로이 값을 특정 항목에 넣고 싶습니다 내 목록에. – user3854612

+1

"forkJoin"은 일반적으로 여러 HTTP 요청에 참여하는 데 사용됩니다. 모든 항목에 대해 "비동기 요청"을 원할 경우 "mergeMap"연산자를 사용할 수 있습니다. –