循环中的jQuery $ .when,等待每个调用完成后再继续循环

时间:2015-09-04 10:15:31

标签: jquery ajax loops .when

我使用$.when在循环中调用ajax函数:

for ( var i = 0; i < 4; i++ ){
    $.when(get_total_price("var1","var2")).then(function (v) {
        console.log("i= "+i);
    });
}

我希望在每次迭代中,它等待ajax调用完成,而不是执行下一次迭代,所以这个简单示例的结果将是:

i= 1
i= 2
i= 3

但结果是:

i= 5
i= 5
i= 5

在这种情况下,我无法在ajax调用中使用i

2 个答案:

答案 0 :(得分:3)

函数回调是异步完成的,因此在循环终止后调用。

答案 1 :(得分:1)

正如其他人所指出的那样,when是在javascript中进行异步编程的延迟模型。循环在异步函数之前终止,即在调用回调时。这是一个使用IIFE

使其工作的黑客攻击
for ( var i = 0; i < 4; i++ ){
    (function() {
        $.when(get_total_price("var1","var2")).then(function (v) {
            console.log("i= "+i);
        })
    )(i);
}