【发布时间】:2018-02-25 08:55:04
【问题描述】:
在我的反应应用程序中,我有一个网格。用户可以一次选择多个网格行,然后单击按钮对选定的网格行执行批量操作。
在服务器端,我有一个脚本,我想为每个选定的行执行(为了简单起见,我在下面的示例中为每个选定的行调用“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 - controlling async calls smartly without any side effect in complex applications中询问此处提到的问题的后续问题
这个问题是JavaScript, React - sending multiple simultaneous ajax calls的后续问题
【问题讨论】:
标签: javascript ajax reactjs promise axios