Wie mache ich eine asynchrone HTTP-Anfrage in einer Angular2-Schleife / Map und ändere das ursprüngliche Schleifenarray?

Neu zu Angular2 hier und ich frage mich, wie diese asynchrone Anforderung für ein Array-Muster ausgeführt werden soll (ich weiß nicht so genau, wie das Muster heißt).

So sagen wir, ich benutze Angular2'sHttp, um eine YouTube-Wiedergabeliste zu erhalten, die @ enthälvideoId in jedem Retourenartikel. Dann muss ich diesen Punkt mit dem @ durchlaufvideoId und fordere YouTube erneut auf, die einzelnen Videoinformationen abzurufen. Dies kann eine weitere häufig verwendete HTTP-Anforderung sein. Rufen Sie die Liste ab und durchlaufen Sie die Liste, um die Details zu jedem einzelnen Element abzurufen.

let url = [YouTube API V3 list url]
let detailUrl = 'https://www.googleapis.com/youtube/v3/videos?part=contentDetails,statistics';

this.http.get(url)
    .map(res => res.json())
    .subscribe(data => {
        let newArray = data.items.map(entry => {

            let videoUrl = detailUrl + '&id=' + entry.id.videoId + 
                                       '&key=' + this.googleToken;

            this.http.get(videoUrl)
                .map(videoRes => videoRes.json())
                .subscribe(videoData => {
                     console.log(videoData);

                     //Here how to I join videoData into each item inside of data.items. 
                });
    });
});

So funktioniert der obige Code. Aber ich habe noch zwei Fragen:

Wie kann ich dem @ beitretevideoData zurück zudata.items und stellen Sie sicher, dass das richtige Element imdata.items wird mit dem richtigen @ verbundvideoData (dasvideoData das benutzt dasentry.id.videoId des zugehörigen Artikels indata.items) und erstelle das neuenewArray?

Woher weiß ich, wann alles erledigt ist und mache etwas basierend auf allen Daten, nachdem alle asynchronen Anforderungen abgeschlossen sind?

Das newArray behält die gleiche Reihenfolge der ersten HTTP-Anforderung bei. Als erstes HTTP wurde die YouTube-Suchlisten-API mit der Reihenfolge von viewCount aufgerufen. Einfach Nest beobachtbar wie oben wird die ursprüngliche Reihenfolge nicht beibehalten.

AKTUALISIERE

Mit inoabrian Lösung kann ich die oben genannten drei Punkte erfolgreich erreichen. Aber wenn ich den myvideoservice erneut aufrufe (wie das Ändern der URL als neues NextPageToken), hat das Subject - this._videoObject 2 Beobachter. Und wieder laden, es hat 3 Beobachter und so weiter. Ich brauche eine Möglichkeit, das Thema auf nur 1 Beobachter zurückzusetzen, damit ich keine doppelten Videos habe. Ist dies eine bewährte Methode zum Löschen / Zurücksetzen des Betreffs?

Antworten auf die Frage(8)

Ihre Antwort auf die Frage