Como fazer uma solicitação HTTP assíncrona dentro de um loop / mapa Angular2 e modificar a matriz de loop original?

Novo no Angular2 aqui e imaginando como fazer essa solicitação assíncrona no padrão de matriz (não tenho tanta certeza sobre o nome do padrão).

Então, digamos que eu use o Angular2Http para obter uma lista de reprodução do YouTube que contémvideoId em cada item de devolução. Então eu preciso percorrer esse item com ovideoId e faça outra solicitação ao YouTube para obter as informações de vídeo individuais. Essa pode ser outra solicitação HTTP comum, obtenha a lista, percorra a lista e obtenha os detalhes de cada item 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. 
                });
    });
});

Portanto, o código acima funciona. Mas ainda tenho essas duas perguntas:

Como faço para participar dovideoData de volta adata.items e verifique se o item correto dentro dodata.items está associado com o corretovideoData (avideoData que está usando oentry.id.videoId do item relacionado dentrodata.items) e crie esse novonewArray?

Como sei quando tudo está pronto e faço algo com base em todos os dados após a conclusão de todas as solicitações assíncronas?

O newArray mantém a mesma ordem da primeira solicitação HTTP. Quando o primeiro HTTP atingiu a API da lista de pesquisa do YouTube, solicite por viewCount. Simplesmente aninhar o observável como acima não manterá a ordem original.

ATUALIZAR

Com a solução inoabriana, posso alcançar com sucesso os três pontos acima. Mas quando ligo novamente para o myvideoservice (como alterar o URL como novo NextPageToken), o Assunto - this._videoObject tem 2 observadores. E carregue novamente, tem 3 observadores e assim por diante. Preciso de uma maneira de redefinir o Assunto para ter apenas 1 observador, para não ter vídeos duplicados. É uma maneira de prática recomendada para limpar / redefinir o assunto?

questionAnswers(4)

yourAnswerToTheQuestion