从API获取复杂数据,创建一个对象数组并对其进行迭代



我正试图从中创建一个复杂对象数组

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) )
})

最新更新