我有一个API,我需要从中查询N页的数据。因为我不想让API过载,所以我想按顺序执行,而不阻塞主线程。
代码应该是这样的:
var res = [];
var totalPages = 10;
var pageSize = 100;
for (let page = 0; page < totalPages; page++) {
$.get('api.php', { page: page, page_size: pageSize }, function(result) {
res.push(...result);
});
}
但这种方法有几个问题:
-
因为它是异步的,所以它只会并行运行所有请求,从而导致API过载。我需要它们仍然异步运行,但每一个都应该只在前一个完成时运行。
-
由于所有的调用都是异步的,到循环结束时,我们仍然没有请求的数据——它将在后台加载。我们需要以某种方式等待所有回调完成后再返回
res
其他需要它的代码。
-
无法让每个回调将其结果传递给下一个回调,当某个回调收到来自服务器的“停止加载”/“不再加载数据”请求时,这是停止加载的唯一方法
有没有一种方法可以解决这些问题,而不用使用一些辅助库或承诺?只是普通的香草javascript。
抱歉,如果有些事情看起来不清楚,我在js方面不是很有经验