Promise.all与嵌套的Promise.all

我嵌套数组,我能够检索第二级数组的承诺,但不知道如何执行一次, then顶级完成以及。

 result.forEach(function(entity){ // outer list ??? return Promise.all(entity.urls.map(function(item){ return requestURL(item.href); })); }); 

例如,如果results有两个或更多的项目,每个item有10个或更多的url需要获取,那么我们如何实现[Promise.all][1]所有的promise。 请原生解决scheme。

基本上以正确的方式处理嵌套数组的承诺。

数据结构:

 var result = [ { urls: [ {href: "link1"}, {href: "link2"}, {href: "link3"} ] }, { urls: [ {href: "link4"}, {href: "link5"}, {href: "link6"} ] } ]; 

使用map而不是forEach ,并将其包装在另一个Promise.all调用中。

 var arr = [ {subarr: [1,2,3]}, {subarr: [4,5,6]}, {subarr: [7,8,9]} ]; function processAsync(n) { return new Promise(function(resolve) { setTimeout( function() { resolve(n * n); }, Math.random() * 1e3 ); }); } Promise.all(arr.map(function(entity){ return Promise.all(entity.subarr.map(function(item){ return processAsync(item); })); })).then(function(data) { console.log(data); }); 

首先压扁数组,然后应用Promise.all

 var urls = result.map(function(entity) => {return entity.urls;}) urls = [].concat.apply([], urls) return Promise.all(urls.map(function(item){ return requestURL(item.href); }));