jquery promises数组触发过早解决

时间:2014-04-29 22:02:05

标签: jquery arrays promise deferred

我有一个动态的输入框列表。单击按钮时,每个行项目都将发送到服务器进行处理并保存到db。当所有请求都返回时,进程应该调用"完成"。

我在网上的各种例子中都有这个:

var promises=[];
$("input").each(function(){
  $(promises).push(
    $.get("processRequest?value="+$(this).val(),
      function(){
        $("div ##div_"+i).html("done with input " + i);
      }
    );
  }
);

$.when.apply(promises).done(function() {
  alert('done!');
}

但是当第一次获得返回时,触发完成。当警报弹出窗口显示时,我仍然可以看到仍有一些请求尚未返回。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

您正在推送.each结果,而不是承诺。 $。当等待承诺的数组中的每个承诺。你的情况是倒退的,试试:

 $("input").each(function(){
    promises.push($.get("processRequest?value="+this.value,
      function(){
        $("div ##div_"+i).html("done with input " + i);
      }
    )
  });

或者:

 var promises = $("input").map(function(e){ 
        return $.get("processRequest?value="+e.value,...);
 }).get();

作为旁注,带有增量数字ID的div通常表示代码设计问题。