2017-07-15 2 views
4

Ich mache eine einfache App mit Angular 4 & eine API, die mehrere Seiten für ihre Anforderungen hat.So verwenden Sie mehrere HTTP-Anfragen in Angular 2

Zum Beispiel bekomme ich die ersten 10 Zeichen mit dieser URL: http://swapi.co/api/people/

und die nächsten 10 Leute zu bekommen Ich habe Anforderung an diese URL zu machen: http://swapi.co/api/people/?page=2

Wie kann ich alle Leute in eine Bitte ? Oder was ist die Lösung, um alle Anfragen mit guten Praktiken zu machen?

+0

@jonrsharpe warum Sie den Code zu löschen und wenn ich sage 'Danke'? –

+0

Weil es eine Frage ist, eine Antwort zu geben und "Danke" zu sagen *. Unter https://stackoverflow.com/help/someone-answers finden Sie geeignete Maßnahmen, wenn Ihre Frage beantwortet wird. – jonrsharpe

+0

Ich dachte, der Code könnte den Menschen in diesem Fall helfen. Und das "Dankeschön durch Vorschuss" bedeutet Danke für die Leute, die an diesem Problem arbeiten werden, es war nicht mit einer Antwort verbunden. Aber ok –

Antwort

10

Sie müssen forkJoin Methode verwenden, um Daten aus mehr als einer Quelle zu laden.

Vor allem, fügen Sie sie in die typescript Datei ein.

import {Observable} from 'rxjs/Rx'; 

Viele Male, müssen wir die Daten von mehr als einer Quelle laden, und wir müssen warten, bis alle Daten geladen hat.

forkJoin Methode umschließt mehrere Observables. Mit anderen Worten, wir verwenden forkJoin, um concurrent http Anfragen auszuführen.

subscribe() Methode der forkJoin setzt die Handler auf den gesamten Satz von Observable.

Sie können mehr über forkJoinhere lesen, einschließlich vieler Beispiele.

Angenommen, Sie müssen die ersten 10 Seiten bekommen.

var pages:number[] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; 

Oder einfach: var pages:number[]=new Array(10).fill().map((v,i)=>i+1);

// map them into a array of observables and forkJoin 
Observable.forkJoin(
    pages.map(
     i => this.http.get('http://swapi.co/api/people/?page=' + i) 
     .map(res => res.json()) 
    ) 
).subscribe(people => this.people = people); 
+0

Danke für deine Antwort. Ich habe meine Frage mit deinen Vorschlägen bearbeitet. –

+0

@QuentinIcky, der Fehler ist, dass Sie die zweite 'map' Methode falsch verwenden. Die zweite 'map' Methode ist an' this.http.get..' angehängt. (wie in meiner Antwort) –

+0

Danke das ist richtig! Ich habe die Frage mit dem neuen Code bearbeitet. Ich bekomme keinen Fehler, aber jetzt verschwinden die Leute aus der Sicht. Wie kann ich die Antwort protokollieren und die Daten in der Komponentendatei verwenden? –