我正在尝试使用递归函数来使用终结点,但无法获取最终数据。如果我使用这个:
let b0 = []
const paginatedAPI = (uri, arr) => {
axios.get(uri)
.then(resp => {
//console.log(resp.data.info.next)
arr = [...arr,...resp.data.results]
//console.log(arr)
if(resp.data.info.next){
paginatedAPI(resp.data.info.next,arr)
}
return arr
})
.catch(error => console.log(error))
return arr
}
b0 = paginatedAPI('https://rickandmortyapi.com/api/character',b0)
并取消注释日志记录语句,很明显数组已正确填充,但是当我在开发工具中对其进行评估时,它当然是空的。一世 首先尝试使用此代码运行正常,但似乎出错:
axios.get('https://rickandmortyapi.com/api/character')
.then(response => {
console.log(response)
let numPages = response.data.info.pages
a0 = [...response.data.results]
for(let i = 2;i <= numPages;i++){
axios.get(`https://rickandmortyapi.com/api/character?page=${i}`)
.then(resp => populateDropDown(a0 = [...a0,...resp.data.results]))
}
})
.catch(data => {
const htmlStr = '<div class="text-danger">We\'re sorry, but an unexpected error occurred</div>';
$('.container').append(htmlStr);
});
我已经尝试过使用谷歌搜索解决方案,但没有运气。谢谢。
答案 0 :(得分:0)
经过进一步的研究并查看了Promises和async / await之后,我仍然觉得我只需要在某个地方 捕获 数据,所以我终于尝试了:
let b0 = []
const paginatedAPI = (uri, arr) => {
axios.get(uri)
.then(resp => {
arr = [...arr,...resp.data.results]
if(resp.data.info.next){
paginatedAPI(resp.data.info.next,arr)
}
b0 = arr
})
.catch(error => console.log(error))
}
paginatedAPI('https://rickandmortyapi.com/api/character',b0)
它有效!谢谢