var dtd = $.Deferred(); // 新建一个 Deferred 对象
var wait = function(dtd){
var tasks = function(){
alert("执行完毕!");
dtd.resolve(); // 改变 Deferred 对象的执行状态
};
setTimeout(tasks,5000);
return dtd;
};
$.when(wait(dtd))
.done(function(){ alert("哈哈,成功了!"); })
.fail(function(){ alert("出错啦!"); });
dtd.resolve();
这段代码是怎样的执行顺序啊,求解释!我想的是先弹出“执行完毕”而后“哈哈,成功了!”而后“执行完毕”而后“哈哈,成功了”但是执行结果是:先弹出“哈哈,成功了!”而后弹出“执行完毕”
1
SoloCompany 2015-01-14 22:07:29 +08:00 via Android 1
done 的意思就是要求必须在状态转变为成功(resolved触发)才触发,你是怎么理解的啊。。。。
|
2
chengliqiang0323 OP @SoloCompany 这是我想的顺序执行:在tasks函数里面有把状态转为成功,我觉得执行到$.when(wait(dtd))是wait函数执行这个时候会alert("执行完毕")而后alert("哈哈,成功了!");然后执行到dtd.resolve(),alert("哈哈,成功了!");
|
3
leonlu 2015-01-24 00:00:58 +08:00 1
$.when接收的应该是Promise对象吧。
```js var doSomethingAsync = function(dtd){ var dtd = $.Deferred(); var tasks = function(){ alert("执行完毕!"); dtd.resolve(); // 改变 Deferred 对象的执行状态 }; setTimeout(tasks,5000); return dtd.promise(); }; $.when(doSomethingAsync()) .done(function(){ alert("哈哈,成功了!"); }) .fail(function(){ alert("出错啦!"); }); ``` |