0

done()で呼び出される他の 3 つの関数の前に、ステートメントの下のコードが実行されるのはなぜwhen()ですか? それはすぐに行きます。when は関数をキューに入れるために使用され、done は when コードが完了したときに何かを実行するために使用されると思いました...

$(document).on('click', '.ajax', function() {
    $.when(func1('<p>first</p>'), func2('<p>second</p>'), func3('<p>third</p>')).done(function() {
        $('body').append('all done');
    });
});

function func1(first) {

    var t = setTimeout(function() {
        $('body').append(first);
    }, 800);
    return "success";

}

function func2(second) {

    var t = setTimeout(function() {
        $('body').append(second);
    }, 2700);
    return "success";
}

function func3(third) {

    var t = setTimeout(function() {
        $('body').append(third);
    }, 200);
    return "success";
}​

http://jsfiddle.net/loren_hibbard/NhAFN/

4

1 に答える 1

5

$.Deferred() を使用して promise を返す必要があります。

function func1(first) {
    var dfd = $.Deferred();

    var t = setTimeout(function() {
        $('body').append(first);
        dfd.resolve();
    }, 800);
    return dfd.promise();

}

http://jsfiddle.net/NhAFN/2/

于 2012-11-16T20:47:36.660 に答える