循环结束时解决延迟

时间:2014-01-07 14:02:25

标签: javascript jquery

我在循环中有一个异步调用,并且我希望在所有延迟都已解决后解析整个函数。

var deferred = JQuery.Dferred();
for (var x in array){
    async(x).then(function(result){
       console.log(result);
    })
}
deferred.promise();

我的问题是:如何在循环结束时创建deferred.resolve()?

2 个答案:

答案 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();