<script> function f1(){ var D = $.Deferred(); setTimeout( function(){ alert("yaha!"); //D.resolve(); // 改变deferred对象的运行状态为"已完成",立即触发done D.reject(); // 改变deferred对象的运行状态为"未完成",立即触发fail },2000 ); return D.promise(); } function f2(){ var D = $.Deferred(); setTimeout( function(){ alert("yaha!"); D.resolve(); D.reject(); },5000 ); return D.promise(); } $.when(f1(),f2()) .done(function(){alert('done!');}) .fail(function(){alert('fail!');}); </script>
开发网站的过程中,我们经常遇到某些耗时很长的javascript操作。其中,既有异步的操作(比如ajax读取服务器数据),也有同步的操作(比如遍历一个大型数组),它们都不是立即能得到结果的。
通常的做法是,为它们指定回调函数(callback)。即事先规定,一旦它们运行结束,应该调用哪些函数。
但是,在回调函数方面,jQuery的功能非常弱。为了改变这一点,jQuery开发团队就设计了Deferred对象(1.5版本)。
简单说,deferred对象就是jQuery的回调函数解决方案。