gpt4 book ai didi

javascript - 当第一个 "things"返回之前总数未知时,在循环中批量运行大量异步 "thing"的优雅方法?

转载 作者:行者123 更新时间:2023-12-01 08:18:43 25 4
gpt4 key购买 nike

我正在解决的问题是在所有页面(问题、标签等)上调用 Stack Exchange API (1.1)。但事实上,这似乎也可能是一个普遍问题,所以我在这里发帖,而不是在 StackApps 上。

因此,简单的方法是进行初步调用以获取总数,然后将其余部分放入循环中。

但是第一个调用实际上也可以获取第一页结果并保存一次调用。

但是将第一次调用作为特殊情况似乎比上面的“简单方法”使代码复杂得多。

事情很复杂,因为我可以一次获取多个页面,但由于速率限制而无法获取全部页面。

如果 JavaScript 提供了任何有用的东西,我将使用 JavaScript 和 jQuery。

这是我想到的一些伪代码,但我还无法让它工作:

batch_num = 0
batch_size = 1 // how many pages to fetch in each batch. 1st is just 1 so we know the total

forever {
get_batch (batch_size)

if (batch_num == 0) {
calculate batch_num to use from now on based on the total number of pages and the rate limits
}

if (batch_num == last) {
break
}

++ batch_num
}

exit

function get_batch (batch_size) {
for (i = 0; i < batch_size; ++i) {
getJSON next page
}
}

代码过于简单,因为异步回调中的内容很重要,并且使代码更加复杂且难以阅读。

我尝试过迭代和递归方法,但无法理解细节以使其正确。

那么,尽管需要额外的异步调用,“简单的方法”是最好的方法吗?或者实际上有没有一种方法可以让像我的伪代码这样的东西优雅而不是复杂地工作?

(如果您觉得这太专业并且不能概括属于 SE API,那么我很乐意将其迁移到 StackApps。)

最佳答案

最终,在提出这个问题一段时间后,我开始接触 Node.js,其中处理异步代码可以说比浏览器 JavaScript 更重要。

用于简化容器上的异步控制流和迭代的最流行的模块/库之一是 Async.js by "caolan" .

它包括三个支持批处理的函数:

limit - The maximum number of iterators / tasks to run at any time.

关于javascript - 当第一个 "things"返回之前总数未知时,在循环中批量运行大量异步 "thing"的优雅方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8777613/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com