1

私はこのようなものを持っています:

fun1: function (){
    var jqXHR = $.get(
            "http://url.com",
             "search=toto",
            function(){});

    jqXHR.fail(function (jqXHR, textStatus, errorThrown){
       //do something
    });

    jqXHR.done(function (data,textStatus,jqXHR){
        //do something
    });
}

fun2: function (){
    fun1();
    //do something AFTER my AJAX requests are finished
}

続行する前に、AJAX リクエストが完了するのを待ちたいと思います。これを実現するには、通常、fun1() でコールバック関数を使用します。しかし、私のコードにはいくつかのレベルのコールバックが含まれており、見た目が乱雑です。次に、メソッドを使用したいのですが、その$.when方法がわかりません:fun1遅延オブジェクトではないため、単に書くことはできません:

$.when(fun1()).then(//do something);
4

2 に答える 2

5

$.when複数のpromiseを待機している場合に最も役立ちます。あなたの状況では必要ないようです。

jqXHRここでは、関数からオブジェクトを返すだけです:

fun1: function (foo){
    // ...
    return jqXHR;
}

fun2: function() {
    fun1().then(function() {
        // ...
    });
}

によって返されるオブジェクトは$.getpromise インターフェイスを実装しているため、コールバックを直接アタッチできます。ドキュメントには、http://api.jquery.com/jQuery.get/の例もいくつか含まれています。

于 2013-06-07T14:12:31.767 に答える
3

promise()から Deferred オブジェクト (または、いっそのこと is )を返す必要がありますfun1()

そうしないと、いつ完成するかわかりません。

それができたら、acll する必要はありません$.when()。代わりに、単に呼び出すことができますfun1().then(...)

于 2013-06-07T14:13:23.283 に答える