我正在尝试获取《星球大战》角色及其家园的列表。 homeworld是一个链接,因此需要再次获取才能获取名称,但是在控制台中它返回[Object promise]。我认为问题在于,尝试获取实际的行星名称需要花费太长时间。但是我该如何解决呢?
const processStarWars = function (jsonObject) {
let arrStarWarsPeople = jsonObject.results;
for (const personage of arrStarWarsPeople){
const name = personage.name;
const birthYear = personage.birth_year;
const planet = fetch(personage.homeworld)
.then(function (response) {
//antwoord van functie fetch bekijken
if (!response.ok){
throw error(`Er lijkt een fout te gebeuren, status code ${response.status}`);
}else{
console.log("object goed gevonden");
return response.json();
}
}).then(function(jsonObject){
//alles is ok dus, we kunnen het object verwerken en doorgeven
console.log(jsonObject.name);
return jsonObject.name;
}).catch(function (error) {
//opvangen van een eventuele fout
console.log(`Er was een fout bij het verwerken van de JSON, fout:${error}`);
});
console.log(`${name} - ${birthYear} - ${planet}`)
}
};
const loadStarWarsInfo = function() {
fetch("https://swapi.co/api/people/")
.then(function (response) {
if (!response.ok){
throw error(`Er lijkt een fout te gebeuren, status code ${response.status}`);
}else{
console.log("object goed gevonden");
return response.json();
}
}).then(function(jsonObject){
console.log("alles oke we kunnen verder");
processStarWars(jsonObject);
}).catch(function (error) {
console.log(`Er was een fout bij het verwerken van de JSON, fout:${error}`);
})
};
document.addEventListener('DOMContentLoaded', function() {
loadStarWarsInfo();
});
答案 0 :(得分:0)
您可以通过等待提取完成,如await fetch(personage.homeworld)
并需要执行processStarWars
函数async
来解决此问题。
演示:
const processStarWars = async function (jsonObject) {
let arrStarWarsPeople = jsonObject.results;
for (const personage of arrStarWarsPeople){
const name = personage.name;
const birthYear = personage.birth_year;
const planet = await fetch(personage.homeworld)
.then(function (response) {
//antwoord van functie fetch bekijken
if (!response.ok){
throw error(`Er lijkt een fout te gebeuren, status code ${response.status}`);
}else{
console.log("object goed gevonden");
return response.json();
}
}).then(function(jsonObject){
//alles is ok dus, we kunnen het object verwerken en doorgeven
console.log(jsonObject.name);
return jsonObject.name;
}).catch(function (error) {
//opvangen van een eventuele fout
console.log(`Er was een fout bij het verwerken van de JSON, fout:${error}`);
});
console.log(`${name} - ${birthYear} - ${planet}`)
}
};
const loadStarWarsInfo = function() {
fetch("https://swapi.co/api/people/")
.then(function (response) {
if (!response.ok){
throw error(`Er lijkt een fout te gebeuren, status code ${response.status}`);
}else{
console.log("object goed gevonden");
return response.json();
}
}).then(function(jsonObject){
console.log("alles oke we kunnen verder");
processStarWars(jsonObject);
}).catch(function (error) {
console.log(`Er was een fout bij het verwerken van de JSON, fout:${error}`);
})
};
document.addEventListener('DOMContentLoaded', function() {
loadStarWarsInfo();
});