为什么我返回 API 数据时会出现错误:无法读取未定义的属性“结果”?
2021-10-21
38
所以这实际上是一个新问题,因为我之前的问题不太清楚,所以我不得不删除它。 我有一个函数,它从父函数中获取 api 数据,并将 div 包含的内容更改为此 api 数据。
父函数:
function searchBook(query){
const url = BASE_URL + `${query}` + '&' + API_KEY;
fetch(url)
.then(res => res.json())
.then(books =>{
console.log(books);
})
.then(books => showBooks(books.results));
因此,它会获取一个 api 并将其打印在控制台中。但在下一个承诺中,我想调用一个函数,通过将书籍添加到 div 中来在页面上显示书籍:
showBooks = books =>{
const main = document.getElementById('book_container');
main.innerHTML = "";
books.forEach(book => {
const bookEl = document.createElement('div');
bookEl.classList.add('book');
bookEl.innerHTML = `
<div class="book">
<div class="border"></div>
<img src="img/cover.jpg">
<div class="book_info">
<h3>${book.title}</h3>
<p>${book.authors}</p>
</div>
<div class="overview">
<p>${book.description}</p>
</div>
</div>
`
main.appendChild(bookEl);
});
}
}
它应该通过“.then”承诺从 searchBooks 函数获取书籍数据,但由于某种原因,它返回下一个错误:
因此,当我从 showBooks(books.results) 中删除结果时,它会返回下一个错误:
由于某种原因,数据未定义,尽管它是通过承诺传递的,所以我不确定可能是什么原因。 我在互联网上搜索了同样的方法,它似乎工作正常,但在我的应用程序中它不起作用。 它在控制台中打印数据,所以数据毕竟被传递了,但由于某种原因它在 showBooks 函数中不起作用。
2个回答
function searchBook(query){
const url = BASE_URL + `${query}` + '&' + API_KEY;
fetch(url)
.then(res => res.json())
.then(books =>{
console.log(books);
return books;
})
.then(books => showBooks(books.results));
您的第二个
.then()
需要返回数据以便在第三个
.then(books => showBooks(books.results))
Antoine
2021-10-21
您可以删除
.then(books =>{
console.log(books);
}
或让其返回
books
,以便下一个
then
可以使用:
.then(books =>{
console.log(books);
return books;
}
tromgy
2021-10-21