I'm currently looping through a paginated API like this, but it seems extremely bulky and repeated and I'm wondering if there's a simpler and faster way to do this.
async function myFunc () {
const totalPages = await getTotalPages()
const res = await new Promise(async (resolve) => {
const completedPages = []
const failedPages = []
let allPages = []
for (let pageNum = 0; pageNum < totalPages; pageNum++) {
getPage(pageNum).then((page) => {
allPages.push(...page)
completedPages.push(pageNum)
if ((completedPages.length + failedPages.length) === totalPages) {
return resolve({ all_pages: allPages })
}
}).catch((err) => {
console.log(pageNum, err)
failedPages.push(pageNum)
if ((completedPages.length + failedPages.length) === totalPages) {
return resolve({ all_pages: allPages })
}
})
}
})
return res
}