如何使用Javascript fetch()在没有递归的情况下获取REST分页数据?

如何使用Javascript fetch()在没有递归的情况下获取REST分页数据?,javascript,rest,recursion,react-native,pagination,Javascript,Rest,Recursion,React Native,Pagination,我正在使用一个带有分页数据的restapi,我需要能够在我的React原生应用程序中使用Javascript和fetch/promise一次访问所有页面。在Python中,我可以这样做: new_result = requests.get(url+offset) while len(new_result) == 1000: new_result = requests.get(url+offset).json() result += new_result offset +=

我正在使用一个带有分页数据的restapi,我需要能够在我的React原生应用程序中使用Javascript和fetch/promise一次访问所有页面。在Python中,我可以这样做:

new_result = requests.get(url+offset)
while len(new_result) == 1000:
    new_result = requests.get(url+offset).json()
    result += new_result
    offset += 1000
let newResult = await fetch(url+offset)
while (newResult.length === 1000) {
    newResult = await requests.get(url+offset);
    result += await newResult.json();
    offset += 1000;
}

如果不进行递归,我似乎无法找到类似的解决方案,我希望避免递归。有没有办法用Javascript实现这一点?如果递归是唯一的前进之路,那么是否有任何推荐的模式?

假设您不想异步/等待,则可以从
then()
回调中“重现”。它看起来像递归,但实际上并不是每次迭代都增加堆栈

这是因为传递给
then()
的回调是从主事件循环间接调用的


除非您使用co例程(需要支持生成器的浏览器)或async/await,否则无法使用直接向上循环,因为该过程是异步的。

如果您可以使用async/
await
,您可以这样做:

new_result = requests.get(url+offset)
while len(new_result) == 1000:
    new_result = requests.get(url+offset).json()
    result += new_result
    offset += 1000
let newResult = await fetch(url+offset)
while (newResult.length === 1000) {
    newResult = await requests.get(url+offset);
    result += await newResult.json();
    offset += 1000;
}

因此,最好的解决方案是类似于
doSomething()。然后(如果(需要另一个循环){doSomething})
?大概是:
doSomething()。然后(如果(需要另一个循环){return doSomething())
@grrrr
doSomething()。然后(result=>需要另一个级别(result){doSomething():result)
@Bergi,我不需要把每一级的结果结合起来吗
doSomething()。然后(result=>needsAnotherLevel(result)?result.concat(doSomething()):result)
Yes,大致如下:-)递归绝对没有问题。这是显而易见的解决方案,所以你应该使用它!你为什么要避免它?