等待ajax显示结果

时间:2013-03-22 15:42:47

标签: jquery deferred promise

我无法完成以下任务。 我有三个功能

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帮助我?

谢谢

1 个答案:

答案 0 :(得分:1)

如果我理解正确,resres3相互独立,res2 可能依赖于res[1]如果< em>初始调用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()resres2已经是“正常”的返回值,那么对res3的内部调用将自动解决,但是如果{{1 }}代替新的res2 promise调用将等待 在继续之前解析。