0

私はjQueryのを理解しようとしてDeferredいますが、サンプルにもかかわらず、やりたいことを達成できません。

そこで、2 つの関数を非同期で呼び出し、両方が終了したら別の関数を呼び出したいと思います。

これが私のコードです

function1();
function2();

function3();

function1()function2()ASP.NET アプリケーションに ajax 呼び出しを行うと、完全に機能します。それらはfunction3()開始前に終了する必要があります。

私はドキュメントを読んでもう一度読んでいますが、function3() は他の 2 つの終了を待ちません。私が理解できるように、私のサンプルを提供していただけますDeferredか? 私のプロジェクトの重要な部分を完了するために、彼らが本当に必要です.

どうもありがとうございました。


ボーナス質問

.whendeferredについて読んだことがあります... function1() running、次にfunction2() running<div>などのような要素を書き込むことができます... ?

アップデート

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>
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 に答える