问题描述
如何处理 angular 中的异步调用。我知道由于异步性质,我将数组设为未定义,但我该如何解决
private fetchData(id){
var array = [];
this.httpClient.get('someUrl/'+id).subscribe((organisation)=>{
console.log(organisation.teams); // ['team1','team2','team3']
organisation.teams.forEach((team)=>{
this.httpClient/get('someUrl/'+team).subscribe((teamData)=>{
array.push(teamData);
})
})
console.log(array); // undefined
})
}
解决方法
您的代码似乎运行良好,并且您正确使用了订阅功能。您记录 undefined
的原因是 console.log(array)
行在对 'someUrl'+team
的 get 请求返回值之前被调用。要检查这一点,您可以将 console.log(array)
行移到订阅范围内(array.push(teamData)
行所在的位置)。
使用更少缩进的更现代的编写方式是使用 async/await:
private async fetchData(id){
var array = [];
let organisation = await this.httpClient.get('someUrl/'+id).toPromise();
console.log(organisation.teams); // ['team1','team2','team3']
let teamData;
organisation.teams.forEach((team)=>{
teamData = await this.httpClient/get('someUrl/'+team).toPromise()
array.push(teamData);
})
console.log(array);
}