嵌套jQuery $ .when
基本上我是想写这个:
var async1 = $.when( a1() ).then(function(){ a2() }); var async2 = $.when( a3() ).then(function(){ a4() }); $.when(async1, async2).then(function(){ console.log("complete"); });
但是当a1和a3执行时,该function认为自己已经解决了。
我把一个相同的例子放在一个小提琴中: http : //jsfiddle.net/Z7fzR/
你永远不会从回调中实际返回由a2()
和a4()
创建的promise对象; 这有效地返回null
,这显然被视为$.when
目的的完成:
你扔掉了a2
和a4
返回的promise对象,实际上是将undefined
传回原来的,这会导致它立即解决:
如果将单个参数传递给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"); });