我从来没有使用过jQuery $ .Deferred,到目前为止,我还没有找到一个例子可以帮助我。

我需要的是能够依次执行3个单独的任务,即步骤1,步骤2和步骤3。步骤2应该等待步骤1完成,步骤3应该等待步骤2完成之后再执行。

我正在尝试以下操作,但似乎无所适从:

        var construct = new $.Deferred();

        construct.done(function() {
            console.log('Step 1');
        });

        construct.done(function() {
            setTimeout(5000);
            console.log('Step 2');
        });

        construct.done(function() {
            console.log('Step 3');
        });

        construct.resolve();


有人在摆弄简单的东西吗?

最佳答案

为了像这样链接Deferred,您必须使用then,并返回一个新的Deferred

var construct = $.Deferred();

construct.then(function() {
    console.log('Step 1');
})
.then(function() {
    return $.Deferred(function (dfd) {
        setTimeout(function () {
            console.log('Step 2');
            dfd.resolve();
        }, 5000);
    });
})
.then(function() {
    console.log('Step 3');
});

construct.resolve();


这是小提琴:http://jsfiddle.net/fMMsz/

10-07 17:25