这是代码: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不起作用
在jQuery中,您可以使用$.when()
将多个Promise合并为一个。
aaa.then(function() {
return $.when(bbb(), ccc());
}).then(ddd);
这将等待aaa
解析,然后将同时运行bbb()
和ccc()
,当它们都解析时,它将调用ddd()
。
这个问题比较老,但是我花了一些时间才能找到要合并的动态递延/承诺数量:
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));