【发布时间】:2013-04-13 17:31:08
【问题描述】:
如果我在一个函数中有一个带有多个链式承诺的 $.Deferred,并且我调用了该函数,我怎么知道该 Deferred 何时解决?例如:http://jsfiddle.net/5AWK4/
jQuery(function($){
var $div = $('<div>hello world</div>').appendTo('body');
var test = (function(){
var dfd = new $.Deferred();
dfd.then(function(){
return $div.animate({width:300}, 5000, 'swing', function(){return $div.append('<br>line 1');});
})
.then(function(){
return $div.append('<br>line 2');
});
return dfd.resolve();
});
$.when(test()).then(function(){
$div.append('<br>line 3');
});
});
当我运行该代码时,我有以下内容:
你好世界
第 3 行
1号线
第 2 行
我期望在我的函数返回的 Deferred 解决后显示 «line 3»。我试图在函数中只返回 dfd ,并且调用 test().resolve() 但它也不起作用。
提前致谢
【问题讨论】:
-
你知道 append 不是异步的,而且 animate 有它自己的回调,所以这真的只是过于复杂了吗?