在我的應用程序的反應,我有一個網格。用戶可以一次選擇多個網格行,然後單擊一個按鈕對所選網格行執行批量操作。作出反應 - 控制多個Ajax調用
在服務器端我有一個腳本,我想爲每個選定的行執行(使問題變得簡單,我在下面的示例中針對每個選定行調用「jsonplaceholder.typicode.com」)的批量操作按鈕。點擊批量操作按鈕後,我會在操作創建器中獲取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
感謝您的回答,讓我試試這個。 –