Проблема в forEach
, который НЕ ВОЗВРАЩАЕТ обещания, которые вы пытаетесь дождаться. По этой причине seasons[0]
остается undefined
. Но поскольку вы регистрируете массив в консоли, а внутри вашего обратного вызова используется ОДИН объект массива, консоль обновляет вывод после поступления данных. Если вы клонируете массив перед регистрацией, вы увидите, что он пуст console.log([...seasons]);
Просто переключите forEach
на map
и используйте Promise.all
.
async fetchCompleteSerie(serie: Serie) {
let allSeasons: any;
let serieSeasons = [];
let allEpisodes: any;
let seasonEpisodes: any;
allSeasons = await this.http
.get("https://www.myapp.com/api/seasons/", this.httpOptions)
.toPromise();
await Promise.all(allSeasons.map(async season => {
season["episodes"] = [];
if (season.serie === serie.url) {
allEpisodes = await this.http
.get("https://www.myapp.com/api/episodes/", this.httpOptions)
.toPromise();
allEpisodes.forEach(episode => {
if (episode.season === season.url) {
season.episodes.push(episode);
}
});
serieSeasons.push(season);
}
}));
return serieSeasons;
}