0

内部的に ajax 呼び出しを行い、成功と失敗のコールバック メソッドを持つ関数があります。

function dothis() {
    object.getMyData(x,y,successCallback,failureCallback);
}

getMyData は非同期であるため、関数はすぐに戻ります。ここで、関数 dothis が successCallback または failureCallback が実行されるまで待機するようにします。deferred を使用してそれを行う方法は?

4

3 に答える 3

1

ajaxすでに deferred を返しているので、それをそのまま使用できます。getMyData返される deferred を返すように変更できますajaxか?

function getMyData() {
    return ajax({
        // ajax params
    });
}

function dothis() {
    // return deferred which comes from ajax
    return object.getMyData(x,y,successCallback,failureCallback); 
}

dothis().done(function(){
    // do something on success
}).fail(function(){
    // do something on failure
});

getMyData遅延を返すように変更できない場合は、次のようにすることができます。

function dothis() {
    var dfd = $.Deferred();
    object.getMyData(x,y,function(){
        dfd.resolve(); // success
    },function(){
        dfd.reject();  // fail
    });
    return dfd.promise(); 
}

dothis().done(function(){
    // do something on success
}).fail(function(){
    // do something on failure
});
于 2013-03-07T05:43:41.050 に答える
0

非同期呼び出しは必要ないようです。

同期呼び出しを実行してから、成功/失敗機能を実行しようとしましたか?どうか明らかにしてください。

ありがとう、

@leo

同期呼び出しの例>

$.ajax({
        type: "GET",
        url: remote_url,
        async: false,
        success : function(data) {
            remote = data;
        }
    });
于 2013-03-06T04:30:55.260 に答える
0

$.whenと$.thenのjquerydeferredの組み合わせを使用することをお勧めします。

あなたはこれを訪問することができます

また、 stackoverflowでも相対的な答えを見つけることができます。

于 2013-03-06T04:37:20.687 に答える