http://jsfiddle.net/McGradi/ezUH9/
按我这样写是event02和event03同时执行。使用jquery的deferred,怎么做到event01->event02->event03按顺序执行?
或者更复杂的,event01->(event02,event03)->event04的顺序。
请高手指教,十分感谢!jquerydeferred

解决方案 »

  1.   

    http://www.ruanyifeng.com/blog/2011/08/a_detailed_explanation_of_jquery_deferred_object.html
      

  2.   

    嵌套调用就行了。。    var event01 = function () {
            var dfd = $.Deferred();
            var task = function () {
                alert('event01 success!');
                dfd.resolve();
            };
            setTimeout(task, 1000);
            return dfd.promise();
        };
        var event02 = function () {
            var dfd = $.Deferred();
            var task = function () {
                alert('event02 success!');
                dfd.resolve();
            };
            setTimeout(task, 5000);
            return dfd.promise();
        };
        var event03 = function () {
            var dfd = $.Deferred();
            var task = function () {
                alert('event03 success!');
                dfd.resolve();
            };
            setTimeout(task, 2000);
            return dfd.promise();
        };
        var event04 = function () { alert('event04 success!'); }
        //$.when(event01()).done(function () { $.when(event02()).done(event03); })//event01->event02->event03    $.when(event01()).done(function () { $.when(event02(),event03()).done(event04); })//event01->(event02,event03)->event04
      

  3.   

    非常感谢!!!不过我还有其他问题:
    1.不过我感觉如果嵌套个6、7层倒是挺凌乱的。有没有办法写成多个语句,
    比如event01->(event02,event03)->event04有没有办法表达成:
    event01->(event02,event03);
    (event02,event03)->event04;2.上面的情况只能处理一直链接下去的情况,对于这种情况(多了个event05)好像没法处理。
      

  4.   

    好像只能这样嵌套。。看最新版的英文版jquery api暂时没找到队列管理之类的方法,可以执行异步队列管理的。
      

  5.   

    谢谢你的答复。我自己折腾出了一些。
    1.http://jsfiddle.net/McGradi/UJRUf/2.http://jsfiddle.net/McGradi/PyYLu/3.前两种情况都可以实现,但是最后这种情况还不知道怎么弄,我再折腾折腾
      

  6.   

    解决了,不过代码不漂亮,新手哈
    http://jsfiddle.net/McGradi/g3QWY/