我有以下代码:
forkJoin([
this.restangular.all(this.commonService.getHospitalURI()).getList(),
this.restangular.all(this.commonService.getAgeGroupURI()).getList()
]).subscribe(responses => {
const hospital_result = responses[0];
// Error because of the line below
const agegroup_result = Array.from(responses[1]);
console.log('hospital ' + JSON.stringify(hospital_result))
console.log('agegroup ' + JSON.stringify(agegroup_result))
for (const productID_hospital of hospital_result[0]['product']) {
for (const productID_agegroup of agegroup_result) {
// Do Something here
}
}
})
我正在使用Angular 5,执行forkjoin以顺序调用响应。这部分完全没问题。但是当它试图解析JSON时会出现错误。
我收到此错误:
src/app/layout/insurance-list/insurance-list.component.ts(75,48): error TS2345: Argument of type '{}' is not assignable to parameter of type 'Iterable<{}>'.
Property '[Symbol.iterator]' is missing in type '{}'.
如果我改变
const agegroup_result = Array.from(responses[1]);
到
const agegroup_result = responses[1];
然后我会收到错误:
src/app/layout/insurance-list/insurance-list.component.ts(85,50): error TS2495: Type '{}' is not an array type or a string type.
我不明白为什么我会遇到这个错误。我正在解析JSON,因为它首先返回一个数组。由于此错误,我无法运行我的项目。
编辑:
以下是agegroup_result的JSON链接: https://plnkr.co/edit/hzkPXqWfGmNNgHuHwAzT?p=catalogue
它被命名为agegroup.json
编辑2:
console.log(responses[1] instanceof Array)
上面的代码返回true。响应[1]是一个数组。
答案 0 :(得分:4)
我试图将我的“任何”数据类型映射到特定的DataModel类型,并且得到了相同的错误消息。因此,要解决此问题,我建议您改用数组的索引,我们开始:
更改此行代码:
const agegroup_result = Array.from(responses[1]);
收件人:
const ages = responses[1];
然后,当您执行“ for”循环时,请使用数组的索引:
for ( const i of Object.keys(ages)){
console.log(ages[i].propertyName);
}
我希望这可以帮助您解决问题。
答案 1 :(得分:1)
它是一个对象,而不是一个数组。尝试使用。从对象获取所有键 Object.Keys函数。
const agegroup_result = Object.keys(responses);
然后您可以迭代响应对象的键,或者您可以将响应映射到数组类型。
如果您添加了响应对象的控制台日志和期望的对象/数组,那么我们可以提供更多帮助。