javascript - 异步角度请求的问题
问题描述
如何以角度处理异步调用。我知道由于异步性质,我的数组未定义,但我该如何解决它
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
})
}
解决方案
您的代码似乎工作正常,并且您正确使用了订阅功能。您记录的原因是在 get 请求返回值之前调用undefined
了该行。要检查这一点,您可以在订阅范围内移动该行(该行所在的位置)。console.log(array)
'someUrl'+team
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);
}
推荐阅读
- google-apps-script - 当该行中的日期早于今天时自动保护行
- javascript - 为什么我的石头/剪刀布游戏在多个函数调用中获得相同的随机数?
- javascript - 构建后在电子 js 中找不到模块
- python - tox 命令在 Windows 中引发异常
- r - tidyverse pubh 的 cross_tab - 无法识别列名
- scala - 如何根据scala/spark中的案例类更改数据框中列的数据类型
- java - java中Stream API中“filter()”方法的性能
- amazon-web-services - 设置到 lightsail 实例 PHPMyAdmin 的隧道后无法连接
- python - 打印对象名称
- javascript - 带有声明值的未定义值 JavaScript