使用典型的分页API返回
{
"data": ...,
"nextPageHref": <url>
}
如何在不使用递归的情况下获取JavaScript 中的所有页面?
(递归解决方案就像)
fetchPaginated(url) {
return fetch(url).then(result => result.nextPageHref
? fetchPaginated(result.nextPageHref).then(results => _.concat(result, results))
: result
}
答案 0 :(得分:2)
AFAIK在没有递归的情况下执行此操作的唯一方法是对async-await的本机支持并使用for循环。请注意,编译的async-await也会编译为一些伪装的递归代码。
但是这种递归不是递归,因为对fetchPaginated
的调用是从回调调用的,所以同步调用堆栈将始终在回调之前被清空(因此它与尾递归几乎没有关系)。如果您担心浏览器异步调用堆栈(仅用于调试目的,我们不需要异步调用堆栈来运行程序),我认为浏览器开发工具中应该有一个复选框来转它关闭。
答案 1 :(得分:0)
我猜您可以在询问页面时发送总页数 - /get_page?page_num=4
:
{
"data": ...,
"number_of_pages": 73
}
如果您可以要求第5页,这将告诉您。
此外,它还有一个优点,即您可以让用户跳过5页或访问最后一页,您可以使用您建议的方法。