如何存储带有以任意顺序返回的 Promise 的 for 循环的计数?

Tom*_*Tom 5 javascript promise angularjs angular-promise

我正在发出一系列 http 请求,当它们返回时,我需要将结果归档到列表对象中。我正在使用角度承诺。

因为 Promise 只会在 for 循环完成后解析,所以它们都会被归档到列表的最后一个索引中。

for (var i = 0;i < list.length; i+=1) {
    Promise.do(action).then(function(result) {
        list[i] //i is always at last index because the for loop has already completed
    }
}
Run Code Online (Sandbox Code Playgroud)

dfs*_*fsq 1

$q.all我会尝试为此使用:

var promises = [];

for (var i = 0; i < list.length; i += 1) {
    promises.push(Promise.do(action));
}

$q.all(promises).then(function(results) {
    console.log(results);
});
Run Code Online (Sandbox Code Playgroud)

从文档中:

返回一个将使用值数组/散列来解析的单个 Promise,每个值对应于 Promise 数组/散列中相同索引/键处的 Promise。如果任何一个 Promise 以拒绝的方式解决,那么由此产生的 Promise 将以相同的拒绝值被拒绝。