我在循环中有一个异步调用,并且我希望在所有延迟都已解决后解析整个函数。
var deferred = JQuery.Dferred();
for (var x in array){
async(x).then(function(result){
console.log(result);
})
}
deferred.promise();
我的问题是:如何在循环结束时创建deferred.resolve()?
答案 0 :(得分:3)
将when
与Promises数组一起使用:
function waitForAll(array) {
var promises = [];
for (var x in array){
promises.push(async(x).then(function(result){
console.log(result);
return result; // don't forget to propagate the result
}));
}
return jQuery.when.apply(null, promises);
}
使用魔术变量arguments
来获得结果。
waitForAll(array).then(function () {
var result = arguments;
for (var index in array) {
console.log(result[index]);
}
}
jQuery的Promise库充其量是混乱的(我确信他们有他们的理由)。如果您想了解有关Promises的更多信息,请查看Promises / A +标准。
答案 1 :(得分:0)
你可以试试.....
var deferred = $.Deferred();
for (var x in array){
async(x).then(function(result){
console.log(result);
deferred.resolve(result);
})
}
return deferred.promise();