另一种选择是将您的阵列阵列展平为一个您可以Promise.all()
直接使用的阵列。直接从MDN 上的示例中,您可以使用.reduce()
and这样做.concat()
:
var promises = [[promise1, promise2], [promise3,promise4], [promise5,promise6]];
Promise.all(promises.reduce(function(a, b) { return a.concat(b); }, []))
.then(function(results) {
// all done here
// results are in a flattened array
});
此解决方案允许原始Promise数组包含单个Promise或Promise数组或两者的任意组合。它在这方面很灵活,它以单个扁平化的结果数组提供结果,这些结果与原始Promise的顺序相同,但被扁平化到单个数组中。因为Promise.all()
需要您向它传递一个数组,所以这里介绍的其他解决方案要求输入是一个严格的数组数组——该数组不能有任何简单的Promise,只有Promise数组。这种解决方案在这方面更加灵活,并且可以接受任何一种类型的输入。
例如,如果输入恰好是这样的,这将工作得很好:
var promises = [promise1, promise2, [promise3, promise4], [promise5, promise6]];
查看工作演示:https : //jsfiddle.net/jfriend00/dLsktyyn/
或者您可能会发现将该flatten()
函数用于其他用途很有用:
function flatten(arr) {
return arr.reduce(function(a, b) { return a.concat(b); }, []);
}
var promises = [[promise1, promise2], [promise3,promise4], [promise5,promise6]];
Promise.all(flatten(promises)).then(function(results) {
// all done here
});
编辑
或者,Javascript 数组现在可以.flat()
为您将数组展平一级:
const promises = [[promise1, promise2], [promise3,promise4], [promise5,promise6]];
Promise.all(promises.flat()).then(function(results) {
// all done here
// results are in a flattened array
});