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

相关文章:

  • 2021-12-25
  • 2022-01-20
  • 2021-07-07
猜你喜欢
  • 2022-12-23
  • 2021-06-17
  • 2022-12-23
  • 2022-02-16
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案