2

私は次のタスクを達成するのに苦労しています。私には3つの機能があります

function f1(param1) {
    var d = $.deferred();
    // ajax call with data param1
   d.resolve(res0, res1);
    return d.promise();
}
function f2(param2) {
    var d = $.deferred();
    // ajax call with data param2
    d.resolve(res2);
    return d.promise();
}

function f3(param3) {
   var d = $.deferred();
   // ajax call with data param3
   d.resolve(res3);
   return d.promise();
}

私はこのようにそれらを実行しています:

$.when(f1(param1),f2(pram2),f3(param3)).done(function(res,res2,res3){

});

私の要件は:

res2が空の場合は、を実行しf2(res[1])ます。表示が完了するとres[0] + f2(res[1]) + res3

それ以外の場合は表示res[0] + res2 + res3

jQuery / promisesを使用してこれを手伝ってくれる人はいますか?

ありがとうございました

4

1 に答える 1

1

私があなたを正しく理解していれば、お互いに独立していますがres、への最初の呼び出しが空の結果を生成したかどうかに依存する場合があります。res3res2 res[1]f2

その場合は、f2再度電話する必要があります。

そう:

$.when( f1(p1), f2(p2), f3(p3)).then(function(res, res2, res3) {
    if (!res2) {             // substitute appropriate "empty" test
        res2 = f2(res[1]);   // call f2 again, getting a new promise
    }
    return $.when(res, res2, res3);  // create new compound promise
}).done(function(res, res2, res3) {
    // do your stuff
});

$.when()への内部呼び出しは自動的に解決されるという考えです if resres2およびres3はすでに「通常の」戻り値ですが、 がres2new に置き換えられた場合promise$.when呼び出しはそれが解決されるのを待ってから続行します。

于 2013-03-22T16:10:03.070 に答える