¿Cómo hacer una solicitud HTTP asíncrona dentro de un bucle / mapa Angular2 y modificar la matriz de bucle original?

Nuevo en Angular2 aquí y me pregunto cómo hacer esta solicitud asíncrona en el patrón de matriz (no estoy tan seguro sobre el nombre del patrón).

Entonces digamos que uso Angular2Http para obtener una lista de reproducción de YouTube que contienevideoId En cada artículo devuelto. Luego necesito recorrer este elemento con elvideoId y hacer otra solicitud a YouTube para obtener la información de video individual. Esta puede ser otra solicitud HTTP común, obtenga la lista, luego recorra la lista y obtenga los detalles de cada elemento individual.

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

Entonces el código anterior funciona. Pero todavía tengo estas dos preguntas:

¿Cómo me uno a lavideoData de regresodata.items y asegúrese de que el elemento correcto dentro deldata.items se une con la correctavideoData (elvideoData que está usando elentry.id.videoId del artículo relacionado dentrodata.items) y crear ese nuevonewArray?

¿Cómo sé cuándo se hace todo y hago algo basado en todos los datos después de que todas las solicitudes asíncronas hayan finalizado?

NewArray mantiene el mismo orden de la primera solicitud HTTP. Cuando el primer HTTP llegó a la API de la lista de búsqueda de YouTube con orden por viewCount. Simplemente anidar observable como arriba no mantendrá el orden original.

ACTUALIZAR

Con la solución inoabrian, puedo lograr con éxito los tres puntos anteriores. Pero cuando llamo al servicio myvideos nuevamente (como cambiar la URL como nuevo NextPageToken), el Asunto - this._videoObject tiene 2 observadores. Y cargar de nuevo, tiene 3 observadores y así sucesivamente. Necesito una forma de restablecer el Asunto para tener solo 1 observador, por lo que no tendré videos duplicados. ¿Es una forma de práctica recomendada para borrar / restablecer el tema?

Respuestas a la pregunta(4)

Su respuesta a la pregunta