我必须麻烦完成以下任务。
我有三个功能
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来帮助我?
谢谢
最佳答案
如果我正确理解,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()
,res
和res2
已经是“正常”的返回值,则对内部的调用将自动解决,但是如果res3
代替了新的res2
,则呼叫将等待解决,然后再继续。关于jquery - 等待ajax显示结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15574386/