我无法完成以下任务。 我有三个功能
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帮助我?
谢谢
答案 0 :(得分:1)
如果我理解正确,res
和res3
相互独立,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()
,res
和res2
已经是“正常”的返回值,那么对res3
的内部调用将自动解决,但是如果{{1 }}代替新的res2
promise
调用将等待 在继续之前解析。