日期:2014-05-16  浏览次数:20408 次

jquery的deferred疑问
http://jsfiddle.net/McGradi/ezUH9/
按我这样写是event02和event03同时执行。

使用jquery的deferred,怎么做到event01->event02->event03按顺序执行?
或者更复杂的,event01->(event02,event03)->event04的顺序。
请高手指教,十分感谢!
jquery deferred

------解决方案--------------------
http://www.ruanyifeng.com/blog/2011/08/a_detailed_explanation_of_jquery_deferred_object.html
------解决方案--------------------
嵌套调用就行了。。

    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

------解决方案--------------------
引用:
非常感谢!!!不过我还有其他问题:
1.不过我感觉如果嵌套个6、7层倒是挺凌乱的。有没有办法写成多个语句,
比如event01->(event02,event03)->event04有没有办法表达成:
event01->(event02,event03);