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

时间:2013-10-07 21:01:05

标签: javascript jquery asynchronous jquery-deferred deferred

我正在尝试理解jQuery的Deferred,但是尽管有样本,但我无法达到我想做的目的。

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

这是我的代码

function1();
function2();

function3();

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

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

非常感谢你。


奖金问题

我已经阅读了.when延迟...可以在某些<div>元素中写入类似 function1()运行,然后 function2( )运行等......?

更新

有关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

这些函数的调用如下:

<script type="text/javascript">
    $(document).ready(function () {
        //some others asynchrounous functions

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

    ...

</script>

1 个答案:

答案 0 :(得分:1)

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

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

现在您可以使用$.when

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

编辑:或:

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