1. Этот обратный вызов должен быть вызван после того, как все ваши обещания будут выполнены. Для проверки следующего набора обновлений. Обновил мой ответ, чтобы показать, как перезвонить.

м приложении для реагирования у меня есть Grid. Пользователь может выбрать несколько строк сетки одновременно и нажать кнопку, чтобы выполнить массовое действие с выбранными строками сетки.

На стороне сервера у меня есть скрипт, который я хочу выполнить для каждой выбранной строки (чтобы упростить вопрос, я делаю вызов «jsonplaceholder.typicode.com» в примере ниже для каждой выбранной строки) по щелчку массового действия кнопка. При нажатии кнопки массового действия я получаю selectedRows в создателе действия, где я перебираю selectedRows и выполняю ajax-вызов для каждой выбранной строки.

Поскольку selectedRows может содержать более 1000 элементов, и если я просто итеративно выполняю вызов ajax с помощью цикла forEach, страница браузера может в конечном итоге перестать отвечать до того, как будет решен каждый из запросов. Поэтому я использовал решение ниже, чтобы отправить запрос в количестве 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

Ответы на вопрос(2)

Ваш ответ на вопрос