jquery Deferred对象

<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的回调函数解决方案。

posted @ 2013-06-08 14:30  soj  阅读(157)  评论(0编辑  收藏  举报