Javascript axios并行请求解析数据表

Javascript axios并行请求解析数据表,javascript,php,jquery,datatables,axios,Javascript,Php,Jquery,Datatables,Axios,我有一个包含会计数据的数据表。其目的是将行id发送到php脚本,该脚本通过SAP管理会计转账,并返回应插入最后一列的参考号或错误文本。这是可行的,但在当前版本中,它是由jqueryajax按顺序、阻塞顺序完成的,这需要时间。我的下一次尝试是使用axios,我问自己,这是否是正确的(并行)方式?(我不熟悉这些承诺。) 编辑: 也许将所有请求推送到阵列中是一种更好的方法: for (var i = 0; i < table.rows().count(); i++) { rowData

我有一个包含会计数据的数据表。其目的是将行id发送到php脚本,该脚本通过SAP管理会计转账,并返回应插入最后一列的参考号或错误文本。这是可行的,但在当前版本中,它是由jqueryajax按顺序、阻塞顺序完成的,这需要时间。我的下一次尝试是使用axios,我问自己,这是否是正确的(并行)方式?(我不熟悉这些承诺。)

编辑: 也许将所有请求推送到阵列中是一种更好的方法:

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();
}
for(var i=0;i{
控制台错误(error);
})
);
}
函数addResultRow(响应){
rowData=table.row('#'+response.data.id).data();
rowData.result=response.data.result;
表.row('#'+response.data.id).data(rowData);
if(response.data.status===true){
$(table.row('#'+response.data.id).node()).addClass('success');
updateProgressBar();
}否则{
$(table.row('#'+response.data.id).node()).addClass('danger');
updateProgressBar();
}
table.draw();
}

效果很好。你的想法?

承诺不是平行的,它们是连续的,这就是它们的目的。如果他们做了什么顺序并不重要,我会考虑在交易开始时标记一行以防止一次以上的事务,然后在事务完成时取消它们。这样,您可以根据需要派生ajax调用。我认为
axios.all
是最好的方法。特别是因为您使用的是共享变量
。如果将其设置为非顺序,则可能会遇到竞争条件。
axios.all
不会为用户提供任何可视进度。我上面的代码按预期工作。它一行接一行地激发,并按接收顺序插入响应。因此,如果3号线需要更长的时间,4号线不会被阻塞。循环中对axios.post()的每次调用都是内存中的一个新实例,并且响应将发送给发送方,还是同一实例接收所有不同的响应?
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();
}