【问题标题】:jQuery $.when in a loop, dosen't wait for each call to be completed before continuing the loop [duplicate]jQuery $.when 在循环中,在继续循环之前不等待每个调用完成[重复]
【发布时间】:2015-11-30 11:09:19
【问题描述】:

我使用$.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

【问题讨论】:

  • 不是 Ajax Asynchornous 吗?如果我没记错的话,Ajax 被设计为 Async
  • @Satya 是的,它甚至在名称中(a同步 javascript and x毫升)

标签: jquery ajax loops .when


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    正如其他人所指出的,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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-05
      • 2021-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-05
      • 2021-11-26
      • 1970-01-01
      相关资源
      最近更新 更多