1

トリッキーな状況です。いくつかの関数が完了するまで、関数の実行を遅らせる必要があります。以下は通常の状況では機能しますが、

    $.when(foo1(), foo2(), foo3()).then(function(){
        //foo4();
    });

私の状況は少し異なります。$.when()渡された関数をすぐに実行したくありません。foo1-3近い将来、他の方法で実行される予定です。foo1-3つまり、自分で選んだ時間に手動で実行したいのです。実行後foo1-3(順不同)にのみ実行されfoo4ます。

私の直感は私に掘り下げるように言いました$.Deferred()、しかし私は私が必要とするものを完全に見つけていません。何か案は?

4

2 に答える 2

3

fooXに渡される deferred を関数に解決させます$.when

var d1 = $.Deferred();
var d2 = $.Deferred();
var d3 = $.Deferred();

function foo1() {
    // do normal work, then
    d1.resolve();
}

// same for other 2 functions

$.when(d1, d2, d3).then(foo4);

http://jsfiddle.net/mattball/nVFnv/

于 2012-08-07T18:40:27.677 に答える
2

各関数が完了するたびにカウントアップするスコアボード変数を作成し、各関数の後に foo4 を呼び出します。スコアが正しい値までカウントされていない場合、foo4 は終了する必要があります。

于 2012-08-07T18:38:45.707 に答える