2016-07-23 4 views
1

Ich weiß, dass Sie durch den Aufruf forkJoin Methode zu warten, mehrere HTTP-Anfragen beobachtbare verwenden können wie unten zu tun:Wie kann man warten, bis Angular2 mehrere dynamische HTTP-Anfragen bearbeitet?

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

aber in meinem Fall, ich mehrere http Beiträge haben, die sie wie die unten dynamisch sind Code gibt es 2 Titel, was wenn ich 100 oder 1000 Titel habe. Wie kann ich mit solchen dynamischen Posts umgehen? Bitte vorschlagen.

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

Was ist das Problem? –

+0

In diesem Fall gibt es 2 Titel, was ist, wenn ich 100 Titel oder 1000 Titel habe, Wie kann ich damit umgehen? Tut mir leid, dass ich nicht klar bin. – Vicheanak

Antwort

3

Eine Möglichkeit ist, eine Schleife zu verwenden, um ein Array von beobachtbaren Sequenzen zu konstruieren:

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

In diesem Beispiel nehme ich an, dass man bereits die Anordnung von bodies dynamisch konstruiert.

+0

Richtige Antwort. Vielen Dank. – Vicheanak

+0

@Darin, gibt es eine Möglichkeit, teilweise gespeicherte Daten zu vermeiden, wenn einige der Nachfragen fehlschlagen? – Yang

+0

@Yang, ja, aber Sie müssen einige Mechanismen auf dem Server Rollback-Anforderungen haben. Die andere Möglichkeit besteht darin, die Payloads in einer einzigen Anfrage an den Server zu senden und die serverseitige Logik dafür sorgen zu lassen. –