我需要操作一个数组来获取我想要的数据,流程是,后端java返回一个对象数组,angular获取数据并作为服务中的可观察对象返回。然后订阅可观察方法并循环访问数据。
我有一个与 java 对象相同的接口结构,循环访问数据并将值推送到该接口类型的空数组。
这里的问题是数据日志记录给出了正确的数组输出,但是当我对数据使用任何数组方法时,它显示未定义。
this.service.getByd(d).subscribe(dataList => {
for (let key in dataList) {
if (dataList.hasOwnProperty(key)) {
this.event.push(dataList[key]);
}
}
},
err => {
console.log(err);
});
console.log(event) //expected output
console.log(event[0].eventType) //undefined
您看到的是未定义,因为代码不会逐行执行:
dataList: DataList[] = new Array<DataList>();
function GetDataList(){
this.service.getByd(d).subscribe(dataList => {
... //populate array
},
err => {
console.log(err);
});
console.log(event) //This works because you are creating it before the get request
console.log(event[0].eventType) //This will get called before the subscribe finishes
}
我为它的工作原理做了一些笔记。
此外,如果接口是后端的镜像,则无需遍历它;只需执行以下操作:
this.service.getByd(d).subscribe(dataList => {
dataList = dataList;
console.log(dataList[0].eventType;
}
},
err => {
console.log(err);
});