javascript — параллельные запросы axios, анализирующие таблицу данных

У меня есть таблица dataTables с данными учета. Цель состоит в том, чтобы отправить идентификатор строки в скрипт php, который управляет переносом учета через SAP и возвращает ссылочный номер или текст ошибки, который должен быть вставлен в последний столбец. Это работает, но в текущей версии это выполняется jQuery ajax в последовательном порядке блокировки, который требует времени. Моя следующая попытка сделать это быстрее сделана с помощью axios, и я спрашивал себя, является ли это правильным (параллельным) способом? (Я новичок в этих обещаниях.)

for (var i = 0; i < table.rows().count(); i++) {
rowData = table.row(i).data();
axios.post('/test/data', rowData).then(function(response){
addResultToRow(response);
// promises.push(axios.post('/test/data', rowData));
});
}

function addResultToRow(response){
rowData = table.row('#'+response.data.id).data();
rowData.result = response.data.result;
table.row('#'+response.data.id).data(rowData);
table.draw();
}

Я думаю, что запрос должен проходить в цикле, но вызов «.then» должен быть снаружи. Разве эта конструкция не блокирует цикл до получения ответа? Я также попробовал метод axios.all (), но он отображает все результаты, когда был получен последний ответ:

axios.all(promises).then(function(results) {
results.forEach(function(response) {
addResultToRow(response);
});
}).catch(function(error){
console.error(error);
});

Может быть, это лучший способ поместить все запросы в массив:

for (var i = 0; i < table.rows().count(); i++) {
rowData = table.row(i).data();
requests.push(
axios.post('/api/test/data', rowData)
.then(function(response){
addResultToRow(response);
})
.catch((error) => {
console.error(error);
})
);
}

function addResultToRow(response){
rowData = table.row('#'+response.data.id).data();
rowData.result = response.data.result;
table.row('#'+response.data.id).data(rowData);
if (response.data.status === true) {
$(table.row('#'+response.data.id).node()).addClass('success');
updateProgressBar();
} else {
$(table.row('#'+response.data.id).node()).addClass('danger');
updateProgressBar();
}
table.draw();
}

Работает хорошо. Твои мысли?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]