我必须麻烦完成以下任务。
我有三个功能

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

谢谢

最佳答案

如果我正确理解,resres3彼此独立,但是如果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()resres2已经是“正常”的返回值,则对内部的调用将自动解决,但是如果res3代替了新的res2,则呼叫将等待解决,然后再继续。

关于jquery - 等待ajax显示结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15574386/

10-11 13:34