2016-07-23 45 views
1

我知道,你可以通过调用forkJoin方法等多个HTTP请求使用可观察到像下面做:如何等待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个标题。我如何处理这种动态帖子请求?请建议。

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

的一种方法是使用循环构造可观察序列的阵列:

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; 
}); 

在这个例子中我假设你已经有动态构造的bodies阵列。

+0

正确答案。谢谢。 – Vicheanak

+0

@Darin,如果某些帖子请求失败,是否有办法避免部分保存的数据? – Yang

+0

@Yang,是的,但你需要在服务器上有一些机制来回滚请求。另一种选择是将单个请求中的有效载荷发送到服务器,并让服务器端逻辑处理此问题。 –