将多个jQuery延迟对象组合成一个新的延迟对象
代码如下: 将代码也粘贴到此处:将多个jQuery延迟对象组合成一个新的延迟对象,jquery,jquery-deferred,Jquery,Jquery Deferred,代码如下: 将代码也粘贴到此处: 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(da
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");
我想要的是在aaa
解决后启动两个新的延迟:bbb
和ccc
。当bbb
和ccc
都被解析时。使用bbb
和ccc
的解析数据调用ddd
可能吗?jsbin不起作用在jQuery中,可以使用
$.when()
将多个承诺组合成一个
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));