在我的React應用程序中,我有一個參數數組(例如一些ID),它應該用作ajax調用隊列的參數。問題是該數組可能包含超過1000個項目,如果我只是遞歸地使用forEach循環進行ajax調用,瀏覽器頁面最終會在每個請求解析之前停止響應。React - 控制對服務器的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'語句來使用多行,也許不是三元運算符嗎?我無法理解你想要用它做什麼。 –
完成,請立即檢查。 –
我提供了一個答案,希望它有幫助。請找出時間查看答案並檢查您認爲最適合的答案。 –