You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS调用PokeAPI仅获取name和url 无法拿到宝可梦类型怎么办

问题描述

需要获取PokeAPI返回JSON数据中的宝可梦类型(Pokémon types)字段,但当前编写的JavaScript请求代码运行后,仅能获取到每个宝可梦对应的name和url属性,无法定位代码错误。
原有实现代码如下:

const baseUrl = 'https://pokeapi.co/api/v2/pokemon/?limit=3000'
try {
    fetch(baseUrl)
        .then(response => {
            const responseJson = response.json()
            return responseJson
        })
        .then(data => {
            const pokemons = data.results
            pokemons.forEach(pokemon => {
                console.log(pokemon);
            })
        })
        .catch(error => {
            console.error(error)
        })
} catch (error) {
    console.error(error)
}

运行结果:
运行结果截图

问题根因

当前请求的是PokeAPI的宝可梦列表分页接口,该接口的results字段设计上仅返回每个宝可梦的名称、详情接口地址两个属性,不会直接返回宝可梦类型、基础数值等详细信息,宝可梦类型字段存储在每个宝可梦对应的单独详情接口返回结果中,直接遍历列表结果自然拿不到types字段。

修复方案

需要遍历列表中每个宝可梦的url字段,二次请求详情接口后再提取types字段,参考实现如下:

const baseUrl = 'https://pokeapi.co/api/v2/pokemon/?limit=3000'

// 封装单个宝可梦详情请求
async function getPokemonDetail(pokemon) {
  const res = await fetch(pokemon.url)
  const detail = await res.json()
  return {
    name: pokemon.name,
    types: detail.types // 目标宝可梦类型字段
  }
}

async function fetchAllPokemonWithTypes() {
  try {
    const listRes = await fetch(baseUrl)
    const listData = await listRes.json()
    // 并发请求所有宝可梦详情
    const pokemonList = await Promise.all(listData.results.map(getPokemonDetail))
    console.log('携带类型字段的宝可梦列表:', pokemonList)
  } catch (error) {
    console.error('请求出错:', error)
  }
}

fetchAllPokemonWithTypes()
注意事项
  • 一次性请求3000个宝可梦详情会产生大量并发请求,容易触发接口限流,实际使用建议调小limit参数做分页加载
  • types字段返回值为数组结构,每个元素包含类型名称、对应详情地址,单属性宝可梦数组长度为1,双属性宝可梦数组长度为2

内容的提问来源于stack exchange,提问作者Alejandro Arias Aguilar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 11:09:16