0

我正在尝试理解 jQuery 的Deferred,但是尽管有示例,但我无法实现我想要做的事情。

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

这是我的代码

function1();
function2();

function3();

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

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

非常感谢。


奖金问题

我读过有关deferred... 可以在某些元素.when中写入类似function1() running,然后function2() running等...?<div>

更新

function1()有关and的更多详细信息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>
4

1 回答 1

1

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

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

现在你可以使用$.when

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

编辑:或:

$.when(function1(),function2()).done(function(){
    function3("test");
});
于 2013-10-07T21:04:46.830 回答