如何拥有第一个功能" foo1()"之后运行$ .when()之前完成处理?

时间:2013-11-20 16:45:06

标签: jquery jquery-deferred deferred .when

我正在使用JQuery v2.0.0

如何使这些函数以从上到下的顺序运行,而不是像异步效果或顺序一样,这意味着在函数“foo1()”首先完成之前不要让函数“foo2()”运行。

foo1();

$.when( foo2() )
    .done(function() { $('#test').dialog('close');  foo3(); })
    .fail(function() { alert('You have a problem!!');  foo3(); });

...谢谢

1 个答案:

答案 0 :(得分:2)

假设foo1看起来像这样:

function foo1() {
    var promise = $.Deferred();
    $.ajax({...}).done(function() { promise.resolve(); })
        .fail(function() { promise.reject(); });
    return promise;
}

你可以这样做:

foo1().done(function() {
    $.when( foo2() )
        .done(function() { $('#test').dialog('close');  foo3(); })
        .fail(function() { alert('You have a problem!!');  foo3(); });
});

...或@Kevin B提到,像这样:

foo1().done(function() {
    foo2()
        .done(function() { $('#test').dialog('close');  foo3(); })
        .fail(function() { alert('You have a problem!!');  foo3(); });
});

...但正如评论所指出的那样,foo1的更好实现看起来像这样,只要foo1 done不需要在{{fail期间进行任何自定义工作,您就可以这样做1}},alwaysfunction foo1() { return $.ajax({...}); }

foo1

否则,如果{{1}}以任何方式不是异步,它将始终首先完成。