这是我的代码:
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排序。当然,我不想进行同步通话。
答案 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
});