在我的反应应用程序中,我有一个网格。用户可以一次选择多个网格行,然后单击按钮对所选网格行执行批量操作。
在服务器端,我有一个脚本,我想在单击批量操作时为每个选定行执行该脚本(为了使问题简单,我在下面的示例中为每个选定行调用“jsonplaceholder.typicode.com”)按钮。单击批量操作按钮时,我会在操作创建器中获取 selectedRows,在其中迭代 selectedRows 并对每个选定行进行 ajax 调用。
由于 selectedRows 可能包含超过 1000 个项目,并且如果我只是使用 forEach 循环迭代地进行 ajax 调用,则浏览器页面最终可能会在每个请求得到解决之前停止响应。因此,我使用下面的解决方案,以 5 个为一组发送请求,然后等待这 5 个请求得到解决。
// Action creator, selectedRows is an array.
function onGridRowsSelection(selectedRows) {
makeBatchCalls(selectedRows,5)
}
async function makeBatchCalls(selectedRows, length) {
let test = arrayIds.reduce((rows, key, index) => (index % length == 0
? rows.push([key])
: rows[rows.length-1].push(key)) && rows, []);
let Batchresults = []; //convert them to two dimensionl arrays of given length [[1,2,3,4,5], [6,7,8,9,10]]
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
}
上面的解决方案工作正常,但有一个问题,
- 从网格中选择 5 行以上,然后单击批量操作按钮,
- 再次选择超过 5 行并单击批量操作按钮,
- 现在我一次看到 10 个活跃请求。
我怎样才能限制这个?
此处提到的问题的后续问题在React - 智能地控制异步调用,在复杂的应用程序中没有任何副作用
这个问题是以下问题的后续问题JavaScript、React - 发送多个同时的 ajax 调用