【问题标题】:Nested jQuery $.when嵌套 jQuery $.when
【发布时间】:2012-12-12 15:40:21
【问题描述】:

基本上我想写这个:

var async1 = $.when( a1() ).then(function(){ a2() });
var async2 = $.when( a3() ).then(function(){ a4() });

$.when(async1, async2).then(function(){ 
    console.log("complete");
}); 

但在 a1 和 a3 执行的那一刻,该函数认为自己已解决。

我把同一个例子放在一个小提琴中:http://jsfiddle.net/Z7fzR/

【问题讨论】:

  • 预计它们什么时候得到解决?
  • @ExplosionPills 当 a1、a2、a3 和 a4 都已解决时,我希望最终何时解决。如果你关注?
  • 只是猜测......如果你把它改成这个会发生什么? $.when( a1().then(function(){ a2() }));
  • @ChrisFrancis 确实有效,但 ExplosionPills 成功了

标签: javascript jquery jquery-deferred


【解决方案1】:

您正在丢弃a2a4 返回的promise 对象,实质上是将undefined 传递回原来的when,这会导致它立即解析:

如果将单个参数传递给 jQuery.when 并且它不是 Deferred,它将被视为已解析的 Deferred,并且任何附加的 doneCallbacks 都将立即执行。

添加一些回报,它工作正常。

var async1 = $.when(a1()).then(function(){ return a2(); });
var async2 = $.when(a3()).then(function(){ return a4(); });

$.when(async1, async2).then(function(){
    console.log("complete");
});  

http://jsfiddle.net/Z7fzR/2/

【讨论】:

    【解决方案2】:

    你永远不会从回调中真正返回由a2()a4() 创建的promise 对象;这有效地返回null,这显然算作$.when目的的完成:

    http://jsfiddle.net/Z7fzR/1/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-10
      • 1970-01-01
      • 2014-07-12
      • 2018-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多