为什么我会收到 Uncaught (in promise) TypeError: Cannot read property 'type' of undefined?
2021-07-24
14819
这是我编写的初始代码,用于控制台记录我想要的数据
const fetchPokemon2 = () =>
{
for (let i = 1; i <= 151; i++)
{
const url = `https://pokeapi.co/api/v2/pokemon/${i}`;
fetch(url)
.then( res => res.json())
.then( data =>
{
console.log(data);
const pokemon = {}
if (data.types['1'])
{
pokemon['name'] = data.name;
pokemon['id'] = data.id;
pokemon['sprite'] = data.sprites['front_default'];
pokemon['type1'] = data.types["0"].type.name;
pokemon['type2'] = data.types["1"].type.name;
}
else
{
pokemon['name'] = data.name;
pokemon['id'] = data.id;
pokemon['sprite'] = data.sprites['front_default'];
pokemon['type1'] = data.types["0"].type.name;
}
console.log(pokemon);
})
}
}
fetchPokemon2();
它工作正常,但这不是推荐的方式,所以我试图这样做
const fetchPokemon = () =>
{
const promises = [];
for (let i = 1; i <= 151 ; i++)
{
const url = `https://pokeapi.co/api/v2/pokemon/${i}`
promises.push(fetch(url).then(resp => resp.json()));
};
Promise.all(promises).then( results =>
{
const pokemon = results.map(data =>
( { name : data.name
, id : data.id
, sprite : data.sprites["front_default"]
, type : data.types["0"].type.name
, type2 : data.types["1"].type.name
}
));
console.log(pokemon);
});
};
fetchPokemon()
但是这行代码
type2: data.types["1"].type.name
is giving the error Uncaught (in promise)
TypeError: Cannot read property 'type' of undefined
这让我很困惑,因为这个 type: data.types["0"].type.name 完全没问题,有人能帮我解决这个问题吗?
2个回答
当指定的数组或对象索引没有值时,就会发生这种情况。这意味着
data.types[1]
可能未定义,因此出现
无法读取
data.types[1].type...
错误。
在第二个代码示例中,您没有检查
data.types[1]
是否存在。您始终可以通过执行以下操作安全地访问该值:
...
type2: data.types[1] && data.types[1].type && data.types[1].type.name
...
aravindanve
2021-07-24
在 API 响应中,某些值的类型数组中只有 1 个元素。这可能是问题所在。您需要在分配数据之前检查数据是否存在。
type2:data.types[1] && data.types[1].type && data.types[1].type.name
Ashik
2021-07-24