【问题标题】:Fetch complex data from API, create a array of objects and iterate this从 API 中获取复杂数据,创建对象数组并对其进行迭代
【发布时间】:2022-01-07 20:25:04
【问题描述】:

我正在尝试从中创建一个复杂对象的数组:

https://demo.ckan.org/api/3/action/package_show?id=sample-dataset-1

我想使用这个对象数组来使用 map() 创建组件


// ... 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
}

我的代码:

  • datasetIDs 是一个字符串数组。这包含数据集名称,例如 sample-dataset-1
  • getDataset 获取API地址,就ok了

export async function getAllDatasets() {
 
    const datasetsIDs = (await listDatasets())
    let allDatasets: DatasetInfoResult[]

    datasetsIDs.map( async id => {
        allDatasets.push( await getDataset(id) )

    })

 return allDatasets

错误信息:TypeError: Cannot read properties of undefined (reading 'push')

尝试另一种方式:


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

错误消息:allDatasets 不可迭代

我怎样才能做到这一点?获取大量数据并使用它的更好方法是什么?

【问题讨论】:

    标签: arrays json typescript api next.js


    【解决方案1】:

    在第一个示例中,您尝试推送到 undefined,因为 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) )
    })
    

    【讨论】:

    • 感谢 Rixcy,但它仍然是 undefined。消息:原因:undefined 无法序列化为 JSON。请使用null 或省略此值。
    猜你喜欢
    • 2021-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-02
    • 2020-01-13
    • 1970-01-01
    • 2018-01-15
    相关资源
    最近更新 更多