将多个 jQuery 个 Deferred 对象组合成一个新的 Deferred 对象
Combine multiple jQuery Deferred objects into a new Deferred object
代码如下:
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");
我想要的是在解决 aaa
时启动两个新的延迟:bbb
和 ccc
。当 bbb
和 ccc
都被解析时。使用 bbb
和 ccc
.
的解析数据调用 ddd
可能吗? jsbin 不工作
在jQuery中,您可以使用$.when()
将多个承诺合并为一个。
aaa.then(function() {
return $.when(bbb(), ccc());
}).then(ddd);
这将等待 aaa
解决,然后它将 运行 bbb()
和 ccc()
并且当它们都解决时,它将调用 ddd()
.
相当老的问题,但我花了一些时间找到要组合的 deffereds/promises 个动态数字的答案:
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));
代码如下: 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");
我想要的是在解决 aaa
时启动两个新的延迟:bbb
和 ccc
。当 bbb
和 ccc
都被解析时。使用 bbb
和 ccc
.
ddd
可能吗? jsbin 不工作
在jQuery中,您可以使用$.when()
将多个承诺合并为一个。
aaa.then(function() {
return $.when(bbb(), ccc());
}).then(ddd);
这将等待 aaa
解决,然后它将 运行 bbb()
和 ccc()
并且当它们都解决时,它将调用 ddd()
.
相当老的问题,但我花了一些时间找到要组合的 deffereds/promises 个动态数字的答案:
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));