在触发第三个函数之前等待两个异步函数的结束(jQuery Deferred?)

我试图理解jQuery的Deferred ,但是尽管有样本,我无法实现我想做的事情。

所以,我想异步调用2个函数,当BOTH结束时,再调用另一个函数。

这是我的代码

 function1(); function2(); function3(); 

function1()function2()对我的ASP.NET应用程序进行ajax调用,它们完美地工作。 它们必须在function3()开始之前结束。

我正在阅读并再次阅读文档,但function3()不等待其他两个人的结束。 你能否提供我的一些样本以便我了解Deferred ? 我真的需要他们来完成我项目的一个重要部分。

非常感谢你。

奖金问题

我已经读过了.when延迟…有可能写一些

元素,比如运行function1() ,然后运行 function2() ……等等?

UPDATE

关于function1()function2()更多细节:它们非常相似,这里是它们的主体:

 function function1() { return $.ajax({ url : "@Url.Action("MyMethod", "MyController")", contentType : "application/json; charset=utf-8", dataType : "json" }).done(function(data) { $.each(data, function(index) { pushDatas(data[index]); }) }).fail(function (result) { alert("function1failed"); }); } function pushDatas(data) { if(!($.inArray(data, loadedDatas) !== -1)) { loadedDatas.push(data); } } 

更新2

这些函数调用如下:

  $(document).ready(function () { //some others asynchrounous functions $.when(function1(), function2()).done(function3("test")); } ...  

function1和function2必须返回promise对象才能工作。 例如,

 function function1 () { return $.ajax({...}); } 

现在你可以使用$.when

 $.when(function1(),function2()).done(function3); 

编辑:或:

 $.when(function1(),function2()).done(function(){ function3("test"); });