完成所有ajax请求后执行代码

时间:2018-10-23 10:53:51

标签: javascript ajax

这是我的代码:

function updateCharts() {
    for (var i = 0; i < charts.length; i++) {
        updateChart(charts[i]);
    }

    sortQueues();
}

function updateChart(chart) {
    $.ajax({
        type: "POST",
        async: true,
        data: '{id: ' + chart.Id + '}',
        url: "foo/getData",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (response) {
            var parsedResponse = JSON.parse(response.d);
            insertChartData(chart, parsedResponse);
        },
        failure: function (response) {
            console.Log(response);
        }
    });
}

所有图表更新后如何运行sortQueues()功能?现在sortQueues()函数在insertChartData完成之前执行(因为ajax调用),并且图表未按html排序。当然,我不想进行同步通话。

1 个答案:

答案 0 :(得分:1)

$.ajax返回一个promise,因此您可以捕获它们并将其与Promise.all一起使用。

首先返回承诺:

function updateChart(chart) {
    return $.ajax({

然后用map替换循环,以便将所有的Promise放在数组中。

var promises = charts.map(updateChart);

然后您可以使用诺言:

Promise.all(promises).then(array_of_results => {
    // all ajax requests recieved at this point
});