【发布时间】:2017-08-03 12:35:49
【问题描述】:
我目前正试图通过重构它以摆脱 AJAX 已弃用的 async: false 选项以供 $.when(...).done(...) 使用。到目前为止,结构如下所示:
$.when($(...).each(function() {
$.when($.ajax({
...
}),$.ajax({
...
}),$.ajax({
...
})).done(function() { //function A
// run as soon as all three AJAX requests in this loop are finished
});
})).done(function() { //function B
// run as soon as $.when().done() of each loop is finished
});
所以基本上我想要一个.each()-loop,它在所有请求完成后异步运行三个独立的 AJAX 请求和函数 A 中的代码。这部分工作到目前为止。
现在的问题是,我希望在 .each()-loop 完成后立即执行函数 B 中的代码,这意味着每个循环的所有 AJAX 请求和函数 A 都应该在函数 B 之前执行到达了。但似乎循环内的$.when(...).done(...) 本身是异步运行的,因此.each()-循环在内部$.when(...).done(...)-函数之前完成,过早执行函数B。有什么办法可以解决这个问题吗?
【问题讨论】:
-
您可以做的是在循环的每次迭代中返回承诺(或将承诺推送到数组)。您使用
$.when.apply(null, <array>)评估该数组,以便在调用函数 B 之前知道所有 AJAX 调用都已完成。
标签: javascript jquery ajax asynchronous .when