【发布时间】:2018-07-19 09:12:46
【问题描述】:
我有一个 AJAX 调用,该调用被称为“i”次。我只想在最后一个 AJAX processData 回调函数完成后执行其余代码(它将 .csv 的值填充到一个名为“lines”的数组中,并且在所有迭代完成后我需要完成的数组)。到目前为止,它只能通过使用“setTimeout()”来工作,这不是一个好的解决方案
for (var i = 0; i < options.length; i++) {
(function(index) {
$.ajax({
type: "GET",
url: options[index] + ".csv",
dataType: "text",
success: function(data) {
processData(data, options[index], type)
}
});
})(i);
}
setTimeout(function() {
getAveragePercentages(lines);
}, 500)
【问题讨论】:
-
我认为“其余代码”是您的 getAveragePercentage(lines) 代码?如果是这样,如果你只是把它放在你的 for 循环之外,那应该可以工作。你如何开始你的 for 循环?通过单击按钮?
-
它从单击按钮开始,正确。如果我把它放在外面,“getAveragePercentages()”的代码将在 ajax 回调完成之前执行
-
@ChristopherSupertramp 这不起作用,因为循环将在所有 ajax 调用完成之前完成。 Ajax 本质上是异步的
-
Promise.all() 可能会有所帮助
标签: javascript jquery ajax iife