我正试图从中创建一个复杂对象数组
https://demo.ckan.org/api/3/action/package_show?id=sample-数据集-1
我想使用这个对象数组来创建使用map((的组件
- 我用过http://json2ts.com要生成响应的类型:
// ... other types like Tag
export type DatasetInfoResult = {
license_title: string
relationships_as_object: string[]
maintainer_email: string
tags: Tag[]
//... all the params
}
export type DatasetInfoResponse = {
help: string
success: boolean
result: DatasetInfoResult
}
我的代码:
- 数据集ID是一个字符串数组。其中包含数据集名称,如sample-dataset-1
- getDataset获取API地址,并且可以
export async function getAllDatasets() {
const datasetsIDs = (await listDatasets())
let allDatasets: DatasetInfoResult[]
datasetsIDs.map( async id => {
allDatasets.push( await getDataset(id) )
})
return allDatasets
错误消息:类型错误:无法读取未定义的属性(读取"推送"(
尝试另一种方式:
export async function getAllDatasets() {
const datasetsIDs = (await listDatasets())
let allDatasets: DatasetInfoResult[]
for (let i = 0; i <= datasetsIDs.length; i++ ) {
const resp = ( await getDataset( datasetsIDs[i]) )
allDatasets = [...allDatasets, resp]
// allDatasets.push(resp)
}
return allDatasets
错误消息:allDataset不可迭代
我该怎么做?获取大量数据并使用这些数据的更好方法是什么?
在第一个例子中,由于allDatasets
没有用值初始化,所以您试图推送到未定义。
let allDatasets: DatasetInfoResult[] // this is undefined, so you can't push to it
datasetsIDs.map( async id => {
allDatasets.push( await getDataset(id) )
})
你可以试试
let allDatasets: DatasetInfoResult[] = []
datasetsIDs.map( async id => {
allDatasets.push( await getDataset(id) )
})