【发布时间】:2017-09-27 03:22:39
【问题描述】:
在我的 React 应用程序中,我有一个参数数组(例如一些 ID),它们应该用作 ajax 调用队列的参数。问题是数组可能包含超过 1000 个项目,如果我只是使用 forEach 循环递归地进行 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语句以使用多行而不是三元运算符?我无法理解你想用它做什么。 -
完成,请立即查看。
-
我提供了答案,希望对您有所帮助。请抽出时间查看答案并检查您认为最合适的答案。
标签: javascript ajax reactjs promise async.js