2016-07-23 97 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,是的,但你需要在服務器上有一些機制來回滾請求。另一種選擇是將單個請求中的有效載荷發送到服務器,並讓服務器端邏輯處理此問題。 –