这里是代码: http://jsbin.com/lizami/edit?js,console
也可以在此处粘贴代码:
var aaa = $.Deferred();
var bbb = function(data){
console.log(data);
var dfd = $.Deferred();
setTimeout(function(){
dfd.resolve("bbb is done");
}, 1000);
return dfd.promise();
};
var ccc = function(data){
console.log(data);
var dfd = $.Deferred();
setTimeout(function(){
dfd.resolve("ccc is done");
}, 1000);
return dfd.promise();
};
var ddd = function(data){
console.log(data);
return data;
};
aaa.then([bbb,ccc]).then(ddd);
aaa.resolve("aaa is done");
我想要的是在解决bbb
时开始两个新的延迟:ccc
和aaa
。当bbb
和ccc
都得到解决时。使用已解析的ddd
和bbb
数据调用ccc
。
有可能吗? jsbin没有工作
答案 0 :(得分:2)
在jQuery中,您可以使用$.when()
将多个promises组合成一个。
aaa.then(function() {
return $.when(bbb(), ccc());
}).then(ddd);
这将等待aaa
解析,然后它会同时运行bbb()
和ccc()
,当它们都解析时,它会调用ddd()
。
答案 1 :(得分:0)
这是一个比较老的问题,但是我花了一些时间才能找到要合并的动态递延/承诺数量的答案:
const promises = [];
promises.push($.Deferred());
...
promises.push($.Deferred());
// execute $.when using Function.apply to pass the array of promises as arg
$.when.apply(null, promises).done(function() {
// executed after all promises are "done"
});
在OP的问题中:
aaa.then(function() { return $.when.apply(null, [bbb(), ccc()] }).done(ddd));