2

我很难完成以下任务。我有三个功能

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并且res3彼此独立,但res2 可能取决于初始调用是否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已经是“正常”返回值,但是 ifres2被替换为 new调用promise$.when等待在继续之前解决。

于 2013-03-22T16:10:03.070 回答