Nuovo in Angular2 qui e chiedendo come eseguire questa richiesta asincrona sul pattern di matrice (non così sicuro sul nome del pattern).Come eseguire una richiesta HTTP asincrona all'interno di un loop/mappa Angular2 e modificare l'array del loop originale?
Quindi diciamo che uso Angular2 Http
per ottenere una playlist di YouTube che contiene videoId
in ciascun articolo di reso. Quindi ho bisogno di scorrere questo articolo con lo videoId
e fare un'altra richiesta a YouTube per ottenere le singole informazioni sul video. Questa può essere un'altra richiesta HTTP comune, ottenere l'elenco quindi scorrere l'elenco e ottenere i dettagli di ogni singolo elemento.
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.
});
});
});
Quindi il codice sopra funziona. Ma ho ancora queste due domande:
Come posso far parte del
videoData
torna adata.items
e assicurarsi che l'articolo corretto all'interno deldata.items
si unisce con la correttavideoData
(lavideoData
che utilizza laentry.id.videoId
del relativo articolo internodata.items
) e creare quello nuovonewArray
?Come faccio a sapere quando tutto è fatto e fare qualcosa in base a tutti i dati dopo che tutte le richieste asincrone sono finite?
Il nuovoArray mantiene lo stesso ordine della prima richiesta HTTP. Come il primo HTTP ha colpito l'API dell'elenco di ricerca di YouTube con ordine di viewCount. Basta nidificare osservabili come sopra non manterrà l'ordine originale.
UPDATE
Con la soluzione inoabrian, posso raggiungere con successo i tre punti. Ma quando chiamo di nuovo il myvideoservice (come cambiare l'url come nuovo NextPageToken), l'oggetto - this._videoObject ha 2 osservatori. E carica di nuovo, ha 3 osservatori e così via. Ho bisogno di un modo per resettare il Soggetto per avere solo 1 osservatore quindi non avrò video duplicati. È un modo migliore per cancellare/resettare il soggetto?
Puoi farlo alla fine? this.posts.sort ((L, R) => { ritorno l.viewCount - r.viewCount; }) – inoabrian
ho aggiunto l'ordinamento al punto in cui i dati sarebbero complete. – inoabrian
beh, ora è completato quando i post e la cache hanno le stesse dimensioni, quindi si ordina l'elenco completo – inoabrian