为什么我无法console.log此功能?

时间:2019-10-15 17:58:05

标签: javascript html api async-await

let fetchPokemons = async() =>{
    for(let i = 0; i < 50; i++){
        await getPokemon(i);
    }
}


let getPokemon= async id => {
    let response1 = await fetch(`https://pokeapi.co/api/v2/pokemon/${id}`);
    let pokemon = await response1.json();
    pokedex(pokemon);
}

function pokedex(pokemon){
    console.log(pokemon.types)
}

fetchPokemons();

我正在尝试创建一个Pokedex。 据我了解,此代码执行以下操作:

FetchPokemon函数将首先运行。 在其中,getPokemon将运行。

从API Pokedex函数获取响应后,将运行。

所以我正在通过console.logging Pokedex函数中的pokemon.types测试口袋妖怪数据是否返回。

所以我理解错了吗?

3 个答案:

答案 0 :(得分:2)

如果要求第0个宠物小精灵,请输入API 404。 404导致一个异常,该异常会杀死您的for循环。试试这个:

function pokedex(pokemon) {
  console.log(pokemon.types)
}

async function getPokemon(id) {
  let response1 = await fetch(`https://pokeapi.co/api/v2/pokemon/${id}`);
  let pokemon;
  try { // Catch the 404 or response error if it happens so loop doesn't die
    pokemon = await response1.json();
  } catch (err) {
    console.error(err);
  }
  pokedex(pokemon);
}

async function fetchPokemons() {
  for (let i = 1; i < 5; i++) { // Start at 1 instead of 0
    await getPokemon(i);
  }
}

fetchPokemons();

答案 1 :(得分:0)

之所以会这样,是因为您从索引0开始并且https://pokeapi.co/api/v2/pokemon/0返回404。您需要将1更改为0。

for(let i = 1; i < 50; i++)

答案 2 :(得分:-1)

此问题的根本原因是您试图迭代不存在的索引。

将其更改为: let i = 1; i <= 50; i++

另外,不等待诺言也不是一个好习惯。您应该将await添加到您的方法调用中。

await fetchPokemons();