在我的React应用程序中,我有一个参数数组(例如一些ID),它应该用作ajax调用队列的参数。问题是该数组可能包含超过1000个项目,如果我只是递归地使用forEach循环进行ajax调用,浏览器页面最终会在每个请求解析之前停止响应。React - 控制对服务器的AJAX调用
是否有一个库,它可以允许发送ajax请求,例如,一次维护5个请求异步。
这是我现在使用的代码。
async function makeBatchCalls(arrayIds, length)
{
//convert arrayIds to two dimensional arrays of given length [[1,2,3,4,5], [6,7,8,9,10] ....]
let test = arrayIds.reduce(
(rows, key, index) => (index % length == 0
? rows.push([key])
: rows[rows.length-1].push(key)) && rows, []);
let Batchresults = [];
for (calls of test) {
Batchresults.push(await Promise.all(calls.map((call)=>fetch(`https://jsonplaceholder.typicode.com/posts/${call}`))));
}
return Promise.all(Batchresults); //wait for all batch calls to finish
}
makeBatchCalls([1,2,3,4,5,6,7,8,9,10,12,12,13,14,15,16,17,18,19,20],5)
此代码的问题是它等待5个电话完成,然后发送另一批5个电话。这不是网络的有效利用。我想要的是在任何时候应该有5个请求。
是否可以调整上面的代码本身来满足要求?
你可以重构你的'reduce'语句来使用多行,也许不是三元运算符吗?我无法理解你想要用它做什么。 –
完成,请立即检查。 –
我提供了一个答案,希望它有帮助。请找出时间查看答案并检查您认为最适合的答案。 –