Angular 角度列表包含元素,但长度为0
我使用下面的代码发出HTTPGET请求,如下所示Angular 角度列表包含元素,但长度为0,angular,typescript,http,asynchronous,Angular,Typescript,Http,Asynchronous,我使用下面的代码发出HTTPGET请求,如下所示 export class Covid19Service { baseUrl = 'https://api.covid19api.com/'; constructor(private http: HttpClient) { } getSummary() { return this.http.get(this.baseUrl + 'summary').subscribe(data => { console.l
export class Covid19Service {
baseUrl = 'https://api.covid19api.com/';
constructor(private http: HttpClient) { }
getSummary() {
return this.http.get(this.baseUrl + 'summary').subscribe(data => {
console.log(data);
});
}
getCountry() {
return this.http.get(this.baseUrl + 'dayone/country/ie/status/confirmed');
}
}
然后,我将数据解析到getCountry()方法中的列表中
导出类BarchartComponent实现OnInit{
dailyTotalConfirmed:编号[]=[];
Dailynewconfirm:编号[]=[];
构造函数(私有covid19:Covid19Service){}
恩戈尼尼特(){
这个。getCountry();
this.calculatedailynewconfirm();
console.log(此.dailyTotalConfirm);
console.log(this.dailynewconfirm);
}
getSummary(){
返回此.covid19.getSummary();
}
getCountry(){
this.covid19.getCountry()
.订阅(数据=>{
const covid=Object.keys(数据);
用于(新冠病毒的常数键){
const cases=data[key]。cases;
每日总确认推送(例);
}
});
}
CalculateDailyNewConfiged(){
const data=this.dailyTotalConfirm;
for(设i=0;i
调用calculateDailyNew()方法时,该方法中的for循环不会执行,因为列表的长度为0,即使在I console.log()调用列表时,列表中有元素。
我做错了什么?如果不在本地运行代码,它看起来像是在
getCountry()
完成之前运行了calculatedailynewconfirm()
您必须对其进行设置,使calculatedailynewconfirm()
仅在getCountry()
从API收到数据后运行。有更好的方法,但最简单的解释和实现方法是将getCountry()
重命名为类似getCountry和calculatedailynewconfirm()
,然后在subscribe块内进行调用:
getCountryAndCalculateDailyNewConfirmed() {
this.covid19.getCountry()
.subscribe(data => {
const covid = Object.keys(data);
for (const key of covid) {
const cases = data[key].Cases;
this.dailyTotalConfirmed.push(cases);
}
this.calculateNewDailyConfirmed();
});
}
希望这能解决您的问题。calculatedailynewconfirm
在subscribe
获取其值之前调用
ngOnInit(){
这个。getCountry()//
getCountryAndCalculateDailyNewConfirmed() {
this.covid19.getCountry()
.subscribe(data => {
const covid = Object.keys(data);
for (const key of covid) {
const cases = data[key].Cases;
this.dailyTotalConfirmed.push(cases);
}
this.calculateNewDailyConfirmed();
});
}