在触发第三个函数之前等待两个异步函数的结束(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"); });