2016-07-23 1 views
1

나는 아래와 같이 수행 할 여러 HTTP 요청을 기다리는 방법을 forkJoin 호출하여 관찰 가능한 사용할 수 있다는 것을 알고 :Angular2가 동적 다중 HTTP 요청을 처리하는 것을 기다리는 방법?

getBooksAndMovies() { 
    Observable.forkJoin(
     this.http.get('/app/books.json').map((res:Response) => res.json()), 
     this.http.get('/app/movies.json').map((res:Response) => res.json()) 
    ).subscribe(
     data => { 
     this.books = data[0] 
     this.movies = data[1] 
     } 
    ); 
    } 

하지만, 내 경우, 나는 그들이 아래와 같은 동적 여러 HTTP의 게시물이 코드에는 2 개의 제목이 있는데, 100 개 또는 1000 개의 제목이 있으면 어떻게됩니까? 어떻게 이러한 동적 게시물 요청을 처리 할 수 ​​있습니까? 제발 제안 해주세요. 난 당신이 이미 bodies의 배열을 동적으로 생성되어 있다고 가정이 예에서는

var data = []; 
for (var i = 0; i < bodies.length; i++) { 
    data.push(this.http.post('/app/books.json', bodies[i], options).map((res:Response) => res.json())); 
} 

Observable.forkJoin(data).subscribe(data => { 
    this.books = data; 
}); 

:

createBooksAndMovies() { 
    let title = ['Hello', 'World']; 
    let headers = new Headers({ 'Content-Type': 'application/x-www-form-urlencoded' }); 
    let options = new RequestOptions({ headers: headers }); 
    let body1 = 'title=' + title[0]; 
    let body2 = 'title=' + title[1]; 

    Observable.forkJoin(
     this.http.post('/app/books.json', body1, options).map((res:Response) => res.json()), 
     this.http.post('/app/books.json', body2, options).map((res:Response) => res.json()) 
    ).subscribe(
     data => { 
     this.book1 = data[0] 
     this.book2 = data[1] 
     } 
    ); 
    } 
+0

무엇이 문제입니까? –

+0

이 경우 2 개의 제목이 있습니다. 제목이 100 개나 1000 개이면 어떻게됩니까? 어떻게 처리합니까? 명확하지 않은 것에 대해 유감스럽게 생각합니다. – Vicheanak

답변

3

한 가지 방법은 관찰 순서의 배열을 구성하기 위해 루프를 사용하는 것입니다.

+0

정답. 감사. – Vicheanak

+0

@Darin, 일부 게시물 요청이 실패 할 경우 부분적으로 저장된 데이터를 피할 수있는 방법이 있습니까? – Yang

+0

@ Yang, 네,하지만 요청을 롤백하려면 서버에 메커니즘이 필요합니다. 또 다른 옵션은 단일 요청으로 페이로드를 서버로 보내고 서버 측 로직이이를 처리하도록하는 것입니다. –

관련 문제