Новое в Angular2 здесь и интересно, как сделать этот асинхронный запрос по шаблону массива (не так уверен в имени шаблона).Как выполнить асинхронный HTTP-запрос внутри цикла/карты Angular2 и изменить исходный массив циклов?
Итак, скажем, я использую Angular2 Http
, чтобы получить список воспроизведения 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. Простое гнездо, наблюдаемое, как указано выше, не сохранит первоначальный порядок.
UPDATE
С inoabrian решения, я могу успешно решить вышеуказанные три очка. Но когда я снова вызываю myvideoservice (например, меняя URL как новый NextPageToken), объект Subject - this._videoObject имеет 2 наблюдателя. И снова загрузите, у него есть 3 наблюдателя и так далее. Мне нужен способ сбросить объект, чтобы иметь только 1 наблюдателя, поэтому у меня не будет дубликатов видео. Это лучший способ очистки/сброса темы?
Не могли бы вы сделать это в конце? this.posts.sort ((L, R) => { возврат l.viewCount - r.viewCount; }) – inoabrian
я добавил сортировку туда, где данные были бы полными. – inoabrian
ну и он завершен теперь, когда сообщения и кеш имеют одинаковый размер, тогда вы сортируете полный список – inoabrian