在我的React应用程序中,我有一个参数数组(例如一些ID),这些参数应该作为ajax调用队列的参数使用。问题在于,数组可能包含1000多个项目,如果我仅仅使用forEach循环递归地进行Ajax调用,那么在每个请求都得到解决之前,浏览器页面最终会停止响应。
是否有一个库可以允许异步地维护5个请求,例如发送Ajax请求?
以下是我现在正在使用的代码。
是否有一个库可以允许异步地维护5个请求,例如发送Ajax请求?
以下是我现在正在使用的代码。
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
语句,使用多于一行的代码,并且不使用三元运算符吗?我有些难以理解你的意图。 - Ghassen Louhaichi