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测试口袋妖怪数据是否返回。
所以我理解错了吗?
答案 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();