首页 > 解决方案 > 试图从包含 API 地址的数组字符串中获取数据

问题描述

我想从包含 API 的数组中获取数据,问题是数组中的 api 数量有时与其他数组不同。

{
"name": "CR90 corvette", 
"model": "CR90 corvette", 
"manufacturer": "Corellian Engineering Corporation", 
"cost_in_credits": "3500000", 
"length": "150", 
"max_atmosphering_speed": "950", 
"crew": "30-165", 
"passengers": "600", 
"cargo_capacity": "3000000", 
"consumables": "1 year", 
"hyperdrive_rating": "2.0", 
"MGLT": "60", 
"starship_class": "corvette", 
"pilots": [], 
"films": [
    "http://swapi.dev/api/films/1/", 
    "http://swapi.dev/api/films/3/", 
    "http://swapi.dev/api/films/6/"
], 
"created": "2014-12-10T14:20:33.369000Z", 
"edited": "2014-12-20T21:23:49.867000Z", 
"url": "http://swapi.dev/api/starships/2/"} 

在上面的 json 代码中,Films字段是我的意思的数组,例如在这个数据中,Films有 3 个 API 地址形式的数据,在其他数据中,它们有 2 个 API 地址数据,依此类推。

我的问题是如何像这样调用数组内部的 API,以及如何同时调用内部的所有 API 地址?

感谢您抽出宝贵时间阅读本文,赞。

标签: javascriptjsonreactjs

解决方案


有很多方法可以做到这一点。以下代码快速连续发送对电影数据的请求,然后用于Promise.all等待它们全部返回,然后再继续。请注意,Promise.all如果一个请求引发异常,它将快速失败。Promise#allSettled如果您想慢速失败,请使用。

const data = { films: [ 'http://example.com/1', 'http://example.com/2', 'http://example.com/3' ]}
const { films: urls } = data
const promises = []

for(let url of urls)
  promises.push(fetch(url))

Promise.all(promises)
  .then((filmDetails) => {
    for(let details of filmDetails)
      console.log(filmDetails)
  })

推荐阅读