我正在使用JQuery v2.0.0
如何使这些函数以从上到下的顺序运行,而不是像异步效果或顺序一样,这意味着在函数“foo1()”首先完成之前不要让函数“foo2()”运行。
foo1();
$.when( foo2() )
.done(function() { $('#test').dialog('close'); foo3(); })
.fail(function() { alert('You have a problem!!'); foo3(); });
...谢谢
答案 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}},always
或function foo1() {
return $.ajax({...});
}
。
foo1
否则,如果{{1}}以任何方式不是异步,它将始终首先完成。