Как сделать асинхронный HTTP-запрос внутри цикла / карты Angular2 и изменить исходный массив циклов?

Новичок в Angular2 здесь и интересующийся тем, как выполнить этот асинхронный запрос к шаблону массива (не уверен насчет имени шаблона).

Так скажем, я использую Angular2Http получить плейлист YouTube, который содержитvideoId в каждом возвращаемом товаре. Затем мне нужно перебрать этот пункт сvideoId и сделать еще один запрос на YouTube, чтобы получить индивидуальную информацию о видео. Это может быть еще один распространенный HTTP-запрос, получить список, затем перебрать список и получить подробную информацию о каждом отдельном элементе.

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

Таким образом, приведенный выше код работает. Но у меня все еще есть эти два вопроса:

Как мне присоединиться кvideoData вернуться кdata.items и убедитесь, что правильный предмет внутриdata.items соединяется с правильнымvideoData (videoData который используетentry.id.videoId соответствующего элемента внутриdata.items) и создать этот новыйnewArray?

Как узнать, когда все сделано, и сделать что-то на основе всех данных после того, как все асинхронные запросы завершены?

NewArray сохраняет тот же порядок первого HTTP-запроса. В качестве первого HTTP ударил API списка поиска YouTube с упорядочением по viewCount. Просто наблюдаемое гнездо, как указано выше, не сохранит первоначальный порядок.

ОБНОВИТЬ

С помощью решения inoabrian я могу успешно достичь вышеупомянутых трех пунктов. Но когда я снова вызываю myvideoservice (как, например, изменение URL-адреса как нового NextPageToken), у Subject - this._videoObject есть 2 наблюдателя. И снова загрузите, у него есть 3 наблюдателя и так далее. Мне нужен способ сбросить тему, чтобы иметь только 1 наблюдателя, чтобы у меня не было дубликатов видео. Это лучший способ очистки / сброса предмета?

Ответы на вопрос(4)

Ваш ответ на вопрос