0

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

var a = function(){
    var that = this;
    var datas = ["data1", "data2",.., "dataN"];
    var dfd = new $.Deferred();
    $.each(datas, function(i,el){
       firstAsyncCall(el); //it does asynchrounus stuff
    });
    secondAsyncCall();
    dfd.resolve();
    return dfd.promise();
    } 

それから

var b = function() {
    a.done( function() { 
    //other async stuff 
    });
}

私の問題は、すべてのinsideの後にcallbackinsideが実行されないことです。.done()async calla()

どうすれば修正できますか?callback実行後にのみ実行するにはどうすればよいa()ですか?

firstAsyncCall secondAsyncCallcallback内部.done()はすべてのasynchronousものであることに注意してください

4

2 に答える 2

1

初めて試してみたので、間違っているか、あなたが望む結果ではないかもしれません。

function firstAsyncCall(el){
    return $.get( "/echo/json/" ).done(function(){
        $("#"+el).css("background", "red");
    });
}

function secondAsyncCall(){
    return $.get( "/echo/json/" ).done(function(){
        $("div").css("border", "2px solid blue");
    });
}

var a = function(){
    var that = this;
    var ajaxReq = [];
    var datas = ["data1", "data2", "data3"];
    var dfd = new $.Deferred();

    $.each(datas, function(i,el){
       ajaxReq.push(firstAsyncCall(el));
    });
    ajaxReq.push(secondAsyncCall());
    $.when.apply($, ajaxReq).then(function(){
        dfd.resolve();
    });   
    return dfd.promise()
}

var b = function() {
    var myA = a();
    myA.done( function() { 
        $("div").css("background", "green");
    });
}
b();

http://jsfiddle.net/Fq99A/

于 2013-07-16T14:20:08.723 に答える